适当的使用位运算可以提升java程序的效率。
什么是位运算?有哪些位运算符?
~ 取反 ,| 或 ,& 与 ,<< 有符号左移,>>有符号右移,>>>无符号右移,^ 异或
数据在计算机底层是用补码进行操作的。
整数的原码,补码和反码都是它本身。
负数的原码符号位是1;反码是除符号位,其他位取反;补码是反码+1.
负数的位移运算:
右移:左边的空出的位置1;左移:
-15的 原码 :10001111 , 反码 11110000 ,补码 11110001.
也可以用四位表示就是:11111,补码是10001,右移两位是11100,原码表示是10100,就是-4.
10010100 补码 11101100 右移两位是 11111011求原码表示是 10000101. 就是-5.
左移:
-15左移2位:
补码:11110001->11000100 表示为原码是 10111100 结果是 60
-15左移4位:原码 1000 0000 0000 1111
补码:1111 1111 1111 0001->1111 1111 0001 0000 表示位原码是 1000 0000 1111 0000 结果是128+64+32+16 = 240
总结一下规律:
右移:相当于 /2 ,因此绝对值会也来越小。
负数:右移之后,高位都补1,而不是只有最高位补1;
正数:右移之后,高位置0.
左移:相当于 X2,因此数值会越来越大,应当注意溢出问题,像上面的-15左移4位,如果用8位来表示,则不能够表示正确的结果,因此应该注意左移的问题。
正数 ,负数都是如此。