读书人

Java位演算的优势

发布时间: 2012-12-24 10:43:14 作者: rapoo

Java位运算的优势

在Java中对数据的运算,有很好的规范支持,尤其是针对二进制的位运算,解决了C/C++ 逻辑右移 于 算术右移的不确定性,几乎所有市面上见到的C/C++编译器都只对有符号数使用算术右移,Java在这方面作的比C/C++出色。

?

这里我用一个经典的1,-1的移位运算码来展示:

?

?

?

?

执行结果如下:

?

?

int size: 32a       : 11111111111111111111111111111111b       : 00000000000000000000000000000001a << 3  : 11111111111111111111111111111000b << 3  : 00000000000000000000000000001000a << 35 : 11111111111111111111111111111000b << 35 : 00000000000000000000000000001000a >> 3  : 11111111111111111111111111111111b >> 3  : 00000000000000000000000000000000a >> 35 : 11111111111111111111111111111111b >> 35 : 00000000000000000000000000000000a >>> 3 : 00011111111111111111111111111111b >>> 3 : 00000000000000000000000000000000a >>> 35: 00011111111111111111111111111111b >>> 35: 00000000000000000000000000000000
?

?

计算机存储数字是以二进制补码表示, 逻辑右移 (>>>) 将高位补0,低位顺序移出, 算术右移(>>) 将延续高位的符号位,负数补1,整数补0, 低位顺序移出。

?

Java中关键的标准在 ,对于一个由w位组成的数据类型, 如果要移动 k >=w 位时, 会采用 k mod w 来作标准移位。

?

这对于一些C/C++ 编译器来说很难做到。

?

从一些很小的语言细节,不难看出sun公司的风格,的确是那句经典的一流公司作标准,二流公司作应用。

?

?

?

?

?

读书人网 >编程

热点推荐