位运算符分为位逻辑运算符和位移运算符
位逻辑运算符
& | 与 | a&b |
| | 或 | a|b |
~ | 取反 | ~a |
^ | 异或 | a^b |
位移运算符
<< | 左移位 | a<<2 |
>> | 右移位 | a>>2 |
1."&"
两个操作数二进制表示,只有对应位同为1,结果位为1,否则为0.
0000 0000 0000 1100
& 0000 0000 0000 1000
——————————————
0000 0000 0000 1000
(12&8)
2. "|"
两个操作数二进制表示,只有对应位同为0,结果位为0,否则为1.
0000 0000 0000 0100
| 0000 0000 0000 1000
——————————————
0000 0000 0000 1100
(4|8)
3."^"
两个二进制表示相同时(同时为0,或者同时为1时),结果为0,否则为1.
0000 0000 0001 1111
| 0000 0000 0001 0110
——————————————
0000 0000 0000 1001
(31^22)
4. "~"
1改为0,0改为1.
~ 0000 0000 0111 1011
——————————————
1111 1111 1000 0100
(~123)
5."<<"
将二进制操作数向左移动规定的位数,高位溢出的位丢弃,低位的空位用0补齐。
00110000 左移一位 (00110000)<<01100000 转换位10进制就是96(48*2)
(当左移两位就是192(48*2^2))
6.">>"
将二进制操作数向右移动规定的位数,低位溢出的位丢弃,高位的空位用0/1补齐(若高位是0,则,用0补齐;若高位是1,则用1补齐)。
右移位运算相当于除以2^n
正负数的二进制表示
首先,1Byte(字节)=8bit(比特),一比特就是二进制中的一个位。一个汉字在计算机内部站2个字节,一个数字占1个字节。
在二进制码中,采用最高位是符号位的方法来区分正负数,正数的符号位为0、负数的符号位为1。
原码:符号位+真值的绝对值
2的原码:0000 0010
-2的原码:1000 0010
反码:正数的反码是其本身;负数的反码是在其原码的基础上,符号位不变,其余各个位取反。
2的反码:0000 0010
-2的反码:1111 1101
补码:正数的补码就是其本身;负数的补码实在其反码的基础上加1.
2的补码:0000 0010
-2的补码:1111 1110
负数的二进制表示=负数的补码