位运算
简介:
机器数:数在计算机中的二进制表示形式
1B=8b 最高位存放符号, 正数为0, 负数为1.
eg: +5: 0000 0101 = [0000 0101]原 = [0000 0101]反 = [0000 0101]补
-5: 1000 0101 = [1000 0101]原 = [1111 1010]反 = [1111 1011]补
真值:带符号位的机器数对应的真正数值,而非机器数的形式值
eg: 0000 0101真值为: +000 0101=+5
1000 0101真值为: -000 0101=-5
机器存储一个具体数字(机器数)的编码方式 :
原码:第一位符号位加上真值的绝对值
eg: [-5]原: 1000 0101
反码:数值位取反
eg: [-5]反: 1111 1010
补码:反码+1
eg: [-5]补: 1111 1011
负数:补码形式参加位运算
-
按位与运算符: (& )
规则: 0&0=0 0&1=0 1&0=0 1&1=1
eg: 3 & 5 =1: 0000 0011 & 0000 0101 = 0000 0001
作用:
①清零:将一个数的二进制形式与一个各位都为0的数进行与运算
eg: 3 &0 =0: 0000 0011 & 0000 0000 = 0000 0000
②取指定位:将一个数的二进制形式与一个待取定位为1,其余为0的数进行与运算
eg: 0000 0011 & 0000 1111 = 0000 0011
-
按位或运算符:(|)
规则: 0^0=0 0^1=1 1^0=1 1^1=0
eg: 3 | 5 =7: 0000 0011 | 0000 0101 = 0000 0111
作用:
①位置置1:将一个数的二进制形式与一个待置位置为1,其余为0的数进行或运算
eg: 0000 0011 | 1111 0000 = 1111 0011
-
按位异或运算符:(^)
规则: 0^0=0 0^1=1 1^0=1 1^1=0 (同0异1)
eg: 3 ^ 5 =7: 0000 0011 ^ 0000 0101 = 0000 0110
作用:
①特定位翻转::将一个数的二进制形式与一个待特定位置为1,其余为0的数进行异或运算
eg: 0000 0011 ^ 0000 1100 = 1111 1111
-
按位取反运算符(~)
规则: ~1=0 ~0=1 ~x=-(x+1);
eg: ~3 = 1000 0100 = -4
作用:
X&~1 :使一个数的最低位为0
~1:1111 1111 1111 1110
-
按位左移运算符(<<):
将一个运算对象的各二进制位全部向左移动若干位(左边的二进制位丢弃,把右边的二进制位补0)
eg: 0000 0011 << 2 = 0000 1100
-
按位右移运算符(>>):
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
eg: 0000 1110 >> 1 = 0000 0111 1000 1110 >> 1 = 1000 0111
-
不同长度的数据进行位运算:
系统会将二者按照右端对齐,然后进行位运算:
- 整型数据为正数,左边补16个0
- 整型数据为负数,左边补16个1
- 整型数据为无符号数,左边补16个0