1、左移右移运算符:
二进制运算的运算符号。
"<<“和”>>"
"<<"左移:其实就是x2的移动位数的次幂
">>"右移:就是除以2的移动位数的次幂。
“>>”和“>>>”
“>>”:最高位补什么,有原有数据的最高位值而定。
如果最高位是0(代表是正数),右移后,用0补空位。
如果最高位是1(代表是负数),右移后,用1补空位。
可能你对负数右移之后用1补空位的结果为什么会等于负数除于2,我们来举个例子:
负数:-4
原码:1000 0100(最高位代表符号位,我们简单的用8位来模拟)
反码:1111 1011(反码除了符号位不取反,其他都取反)
补码:1111 1100 (补码=反码+1)
-4右移一位之后
补码:1111 1110
反码:1111 1101(反码=补码-1)
原码:1000 0010(结果就是-2)
注意:正数的原码、反码、补码都一样
“>>>”:无论最高位是什么,右移后,都用0补。
2、~取反运算符
按位取反:二进制每一位取反,0变1,1变0。
~9的计算步骤:
转为原码:0 1001
计算补码:0 1001
按位取反:1 0110
1 0110转为原码(注意现在它是一个负数了):
反码:1 0101
原码:1 1010
符号位为1是负数,即-10
~-9的计算步骤:
转二进制:1 1001
计算补码:1 0111
按位取反:0 1000
0 1000转为原码:
反码:0 1000
原码:0 1000(也就是8)