您的位置:首页 > 其它

byte或short类型在左移时应注意的问题

2010-10-17 08:54 148 查看
package com.kkoolerter.jdk;

/**
* 位移(ByteShift)
* @author Jenson
*
*/
public class ByteShift {

public static void main(String[] args) {
byte a = 64,b;
int i = a << 2;
b = (byte)(a<<2);

System.out.println("a的原始值:a="+a);
System.out.println("i="+i+",b="+b);

/*
*这个程序段说明了Java在对shot的byte类型进行位移时,将会产生出人
*意料的结果。因为对一个表达式求值 时,byte和short将自动 提升为int
*类型,表达式结果也是一个int类型。也就是byte或short值向左移位的
*结果是一个int,但移到左边的位超过了第31位将丢失。此外,负的byte
*或short值在提升为int时,其符号将扩展,高阶位将用1来填充。为此
*在一个byte或short上执行一个左移则会丢弃int结果的最高阶位。例如,
*如果左移一个byte值,该值首先被提升为int,然后再在int上执行一个
*左移。此时,如果需要的一个移位后的byte值,则必须丢弃结果中的前3
*个字节,方法是将结果强制转换为byte类型。
*/
}
}
本文出自 “有思想的代码” 博客,请务必保留此出处http://wujuxiang.blog.51cto.com/2250829/406794
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: