您的位置:首页 > 编程语言 > Java开发

Java位运算

2015-08-31 10:33 176 查看
/* 位运算

* java使用补码来表示2进制数,最高位为符号位,正数为0,负数为1,补码规定:

* 整数,最高位是0,其余是本身,如 +42的补 码 为 00101010

* 负数,最高位是1,将其余的决定值按位取反,最后+1,即为负数的补码;

* 如 -42的 补 码 为 11010110 (00101010 按位 取 反 11010101 +1=11010110 )

********

*逻辑运算*

********

a&b 与[真真为真,真假为假]

0000 0000 0000 0000 0000 0000 0000 0001

0000 0000 0000 0000 0000 0000 0000 0010

=

0000 0000 0000 0000 0000 0000 0000 0000

System.out.println(1 & 2);

结果为0

a|b 或[假假为假,其余全真]

0000 0000 0000 0000 0000 0000 0000 0001

0000 0000 0000 0000 0000 0000 0000 0010

=

0000 0000 0000 0000 0000 0000 0000 0011

System.out.println(1 | 2);

结果为3

~a 非[真则假,假则真]

0000 0000 0000 0000 0000 0000 0000 0001

=

1111 1111 1111 1111 1111 1111 1111 1110

System.out.println(~1);

结果为:-2

a^b 异或: [相同为假,不同为真](任何一个数异或它自己为0,其他数再来异或它,等于其他数)

0000 0000 0000 0000 0000 0000 0000 0001

0000 0000 0000 0000 0000 0000 0000 0010

=

0000 0000 0000 0000 0000 0000 0000 0011

System.out.println(1^2);

结果为 3

********

*移位运算*

********

a>>b 有符号右移位;将a右移b位;若正数,高位补0,负数,高位补1

0000 0000 0000 0000 0000 0000 0000 0011

>>1

=

0000 0000 0000 0000 0000 0000 0000 0001

System.out.println(3>>1);

结果为1,结果与 3 / 2的1次幂相同

a<<b 有符号左移位;将a左移b位,若正数,高位补0,负数,高位补1

0000 0000 0000 0000 0000 0000 0000 0011

<<2

0000 0000 0000 0000 0000 0000 0000 1100

System.out.println(3<<2);

结果为12,与3*2的2次幂相同

a>>>b 无符号右移位;将a左移b位,不论正负,高位均补0

0000 0000 0000 0000 0000 0000 0000 0011

>>1

=

0000 0000 0000 0000 0000 0000 0000 0001

System.out.println(3>>>1);

结果为1,与3/2的1次幂相同

*/

System.out.println(3>>>1);

System.out.println();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: