设为首页 加入收藏

TOP

Java 位运算符(二)
2014-11-24 14:57:56 来源: 作者: 【 】 浏览:77
Tags:Java 运算
的值也是int 型。对byte 和short类型的值进行移位运算的结果是int 型,而且如果左移不超过31位,原来对应各位的值也不会丢弃。但是,如果你对一个负的byte 或者short类型的值进行移位运算,它被扩大为int 型后,它的符号也被扩展。这样,整数值结果的高位就会被1填充。因此,为了得到正确的结果,你就要舍弃得到结果的高位。这样做的最简单办法是将结果转换为byte 型。下面的程序说明了这一点:


// Left shifting a byte value.
class ByteShift {



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



i = a << 2;
b = (byte) (a << 2);



System.out.println("Original value of a: " + a);
System.out.println("i and b: " + i + " " + b);
}
}



该程序产生的输出下所示:


Original value of a: 64
i and b: 256 0



因变量a在赋值表达式中,故被扩大为int 型,64(0100 0000 )被左移两次生成值256 (10000 0000 )被赋给变量i。然而,经过左移后,变量b中惟一的1被移出,低位全部成了0,因此b的值也变成了0。


既然每次左移都可以使原来的操作数翻倍,程序员们经常使用这个办法来进行快速的2 的乘法。但是你要小心,如果你将1移进高阶位(31或63位),那么该值将变为负值。下面的程序说明了这一点:


// Left shifting as a quick way to multiply by 2.
class MultByTwo {



public static void main(String args[]) {
int i;
int num = 0xFFFFFFE;



for(i=0; i<4; i++) {
num = num << 1;
System.out.println(num);



}
}
这里,num 指定要移位值value 移动的位数。也就是,左移运算符<<使指定值的所有位都左移num位。每左移一个位,高阶位都被移出(并且丢弃),并用0填充右边。这意味着当左移的运算数是int 类型时,每移动1位它的第31位就要被移出并且丢弃;当左移的运算数是long 类型时,每移动1位它的第63位就要被移出并且丢弃。


在对byte 和short类型的值进行移位运算时,你必须小心。因为你知道 Java 在对表达式求值时,将自动把这些类型扩大为 int 型,而且,表达式的值也是int 型。对byte 和short类型的值进行移位运算的结果是int 型,而且如果左移不超过31位,原来对应各位的值也不会丢弃。但是,如果你对一个负的byte 或者short类型的值进行移位运算,它被扩大为int 型后,它的符号也被扩展。这样,整数值结果的高位就会被1填充。因此,为了得到正确的结果,你就要舍弃得到结果的高位。这样做的最简单办法是将结果转换为byte 型。下面的程序说明了这一点:


// Left shifting a byte value.
class ByteShift {



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



i = a << 2;
b = (byte) (a << 2);



System.out.println("Original value of a: " + a);
System.out.println("i and b: " + i + " " + b);
}
}



该程序产生的输出下所示:


Original value of a: 64
i and b: 256 0



因变量a在赋值表达式中,故被扩大为int 型,64(0100 0000 )被左移两次生成值256 (10000 0000 )被赋给变量i。然而,经过左移后,变量b中惟一的1被移出, 位全部成了0,因此b的值也变成了0。


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇如何获取Linux-gate.so.1动态库 下一篇Android UI进阶之弹窗的使用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: