位操作 &与、|或、~按位取反、^异或、<<左移、>>右移
右移>> 正数高位补0,负数高位补1
无符号右移>>> 不论正负,高位均补0
无符号左移是不存在的,因为左移在低位补位,而低位没有正负数的概念,因此不存在无符号左移
demo:右移
负数:例如-4>>2(高位补1)
首先写出-4的二进制数源码,因为是负数所以最高位为1 (负数的源码是负数的绝对值)
1000 0100
然后写出-4反码:保证符号位不变,其余位置取反
1111 1011(反码)
最后写出-4的补码:在反码的基础上加1
1111 1100(补码)
右移2位: 在高位补1
1111 1111
//!!!!!!!!!!!!!!!!!!!!
根据补码写出原码才是我们所求的结果, 保留符号位,然后减1取反 (或按位取反再加上1)
1111 1110(减1的结果)
1000 0001(取反的结果)
结果为:-1
重点:根据补码写出原码才是我们所求的结果, 保留符号位,然后减1取反 (或按位取反再加上1)
demo:无符号右移>>>
无符号右移>>>(不论正负,高位均补0) 注意:无符号,所以都是当正数操作的
正数:例如4>>>2
与4>>2的运算相同,结果也为1
负数:例如-4>>>2
首先写出-4的二进制数,因为是负数所以最高位为1
1000 0100
然后写出-4补码:保证符号位不变,其余位置取反加1(从右往左遇到第一个1,然后剩下的全部取反就是了)
1111 1100(补码)
右移2位: 在高位补0
0011 1111
此时为正数,求源码与补码相同
结果为:63