前言
第三天用到的bit_or(),bit_and(),bit_count()三个函数,发现自己对位运算不清楚
正文
计算机对二进制数进行四则运算称位运算
1.位运算符号概览
符号 | 描述 | 运算规格 |
---|---|---|
& | 与 | 两个位都为1时为1 |
| | 或 | 两个位都为0时为0 |
^ | 异或 | 相同为0,异为1 |
~ | 取反 | 0取1,1取0 |
<< | 左移 | 各二进制全部左移,高位丢弃,低位补0 |
>> | 右移 | 各二进制全部右移,对于无符号数,高位补0... |
2.按位与运算(&)
运算规则:
eg:0&0=0 0&1=0 1&0=0 1&1=1
eg:3&5即0000 0011&0000 0101=0000 0001,因此3&5=1
使用场景
(1)清零:与0相与
(2)取一个数的指定位:指定位与都是1的进行与运算
(3)判断奇偶:末位为0为偶数,if(a&1 == 0)
3.按位或运算(|)
运算规则:
eg:0|1 = 1 1|0 = 1 1|1 = 1 0|0 = 0
eg:3|5即0000 0011|0000 0101 = 0000 0111即3|5=7
4.异或运算(^)
运算规则:(同为0异为1)
eg:0^0=0 0^1=1 1^0=1 1^1=0
eg:3^5即0000 0011^0000 0101=0000 0110即3^5 = 6
性质:
(1)与0异或值不变
(2)x^x=0 ,a ^ b ^ b = a
5.取反运算(~)
运算规则:
eg:~1=0 ~0=1
5.左移运算(<<)
运算规则:(每左移一位视为乘以2)
2左移两位,即a=0000 0010,a<<2 = 0000 1000即为8
6.右移运算(>>)
运算规则:(正数左补0,负数左补1,右边丢弃,每右移一位视为除以2)
16右移两位,即a=0001 0000,a>>2 = 0000 0100即为4
码制
1.二进制数正负有三种表示法——原码;反码:补码
2.二进制数:第一位为符号位,0正1负;后面是数值位
3.正数三种表示方式相等:原码=反码=补码
4.负数三种表示不同:
(1)原码:符号位"1"+二进制数绝对值数值
eg:-5 = 1 000 0101
(2)反码:符号位"1"+数值位按位取反
eg:-5 = 1 111 1010
(3)补码:反码+末位"1"
eg:-5 = 1 111 1011
网友评论