目录
位运算符
例: 128十进制转二进制
正数在内存中以原码形式存放,负数在内存中以补码形式存放
正数的原码=反码=补码
原码:将一个整数,转换成二进制,就是其原码。
如64的原码为:0100 0000;-64 的原码为1100 0000。
反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每一位取反。
如的64的反码为:0100 0000;-64 的反码为1011 1111。
补码:正数的补码=原码;负数的反码+1 =补码。
例如:
64的补码为:0100 0000;-64 的补码为1100 0000
在计算机中,正数是可以直接用原码表示的如64,在计算机中就表示为:0100 0000。
负数用补码表示,如-64,在计算机中表示为1100 0000。
无论是正数还是负数,编译系统都是按内存中存储的内容进行位运算。
1、&按位与
有0为0,全1为1
0001 1011&
1011 0000
0001 0000
2、| 按位或
有1为1,全0为0
0101 0011 |
1011 0000
1111 0011
3、~ 按位取反
1 变0,0 变1
0100 1101 ~
1011 0010
4、^ 按位异或
相异得1,相同得0
1001 1110 ^
0101 1010
1100 0100
5、位移
>>右移
<< 左移
注意右移分:逻辑右移、算数右移
(1)右移>>
逻辑右移高位补0,低位溢出
算数右移高位补符号位,低位溢出(有符号数)
a、逻辑右移
低位溢出、高位补0,无论是有符号数还是无符号数都是高位补0,低位溢出
0101 1010 >>2
0001 0110
b、算数右移:
对有符号数来说
低位溢出、高位补符号位,对无符号数来说,高位补0,低位溢出
1010 1101 >> 3
1111 010 1
0101 0011 >>3
0000 101 0
在一个编译系统中到底是逻辑右移,还是算数右移,取决于编译器
(2) 左移<<
高位溢出,低位补0
8<<1
0000 1000
0001 0000