位运算总结

333 阅读3分钟

位运算

  1. 按位与(&): 同 1 为 1, 其余为 0 按位与运算。按位与运算符&是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现.

  2. 按位或(|): 同 0 为 0, 其余为 1   按位或运算。按位或运算符|是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现.

  3. 按位异或(^):相同为 0, 不同为 1   按位异或运算。按位异或运算符^是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现.

  4. 按取反(~):0变1, 1变0   求反运算符为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。

  5. 左移(<<):高位丢弃,低位补0 左移运算<<是双目运算符。其功能把<<左边的运算数的各二进位全部左移若干位,由<<右边的数指定移动的位数, 高位丢弃,低位补0。

  6. 右移(>>): 低位丢弃,高位补0 右移运算>>是双目运算符。其功能把>>左边的运算数的各二进位全部右移若干位,由>>右边的数指定移动的位数, 低位丢弃,高位补0。

左移 n 位, 相当于扩大到 2n2^n
右移 n 位, 相当于缩小到 2n2^n

1、原码

原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如如果是8位二进制:

[+1]原 = 0000 0001

[-1]原 = 1000 0001

第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:[1111 1111 , 0111 1111]

[-127 , 127]

原码是人脑最容易理解和计算的表示方式。

2、反码

反码的表示方法是:正数的反码是其本身。负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

可见如果一个反码表示的是负数,人脑无法直观地看出来它的数值。通常要将其转换成原码再计算。

3、补码 补码的表示方法是:正数的补码就是其本身。负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(即在反码的基础上+1)。

[+1] = [00000001]原 = [00000001]反 = [00000001]补

[-1] = [10000001]原 = [11111110]反 = [11111111]补

对于负数,补码表示方式也是人脑无法直观看出其数值的。通常也需要转换成原码在计算其数值。