前言
常用的二进制位运算技巧,本文适用于C语言。
运算符
- 逻辑运算符
&& - 逻辑与 || - 逻辑或 ! - 逻辑非
逻辑运算符的运算结果只有
true(1)
和false(0)
2种。
运算逻辑
运算逻辑:
//逻辑或
true && true //true
true && false //false
false && false //false
//逻辑与
true || true //true
true || false //true
false || false //false
//逻辑非
!true //false
!false //true
- 位运算符
& - 与 | - 或 ^ - 异或 ~ - 取反 << - 左移 >> - 右移
位运算符的运算结果是一个数字。
运算逻辑
运算逻辑:
以下均为二进制,省略0b前缀
以下均为二进制,省略0b前缀
//与
1111 & 1100 //1100
0000 & 1100 //0000
0101 & 1010 //0000
//或
1111 | 1100 //1111
0000 | 1100 //1100
0101 | 1010 //1111
//异或 (不一样的位为1,一样的位为0)
1111 ^ 1100 //0011
0000 ^ 1100 //1100
0101 ^ 1010 //1111
//取反
~1111 //0000
~0000 //1111
~0101 //1010
//左移 (相当于*2)
1111 << 1 //1110
0000 << 1 //0000
0101 << 1 //1010
//右移 (相当于/2)
1111 >> 1 //0111
0000 >> 1 //0000
0101 >> 1 //0010
整数的二进制编码方式
在现代计算机大都采用补码的方式储存数字。
数字的常用编码方式:
表示范围:
编码方式:
[-127 ~ +127]
编码方式:
正数不变,负数符号位置1
数值 | 二进制 |
---|---|
2 | 0000 0010 |
1 | 0000 0001 |
0 | 0000 0000 |
-1 | 1000 0001 |
-2 | 1000 0010 |
表示范围:
编码方式:
[-127 ~ +127]
编码方式:
正数不变,负数为正数按位取反
数值 | 二进制 |
---|---|
2 | 0000 0010 |
1 | 0000 0001 |
0 | 0000 0000 |
0 | 1111 1111 |
-1 | 1111 1110 |
-2 | 111 1101 |
表示范围:
编码方式:
[-128 ~ +127]
编码方式:
正数不变,负数为反码+1 (消除0的重码)
数值 | 二进制 |
---|---|
2 | 0000 0010 |
1 | 0000 0001 |
0 | 0000 0000 |
-1 | 1111 1111 |
-2 | 1111 1110 |
常用二进制技巧
功能 | 公式 |
---|---|
判断奇偶 | y = x & 1 (奇数为1) |
取第n 位 |
y = x & (1<<n) |
将第n 位置为 1 |
y = x | (1<<n) |
将第n 为置为 0 |
y = x & ~(1<<n) |
将第n 位的值取反 |
y = x ^ (1<<n) |
本文链接:https://blog.chrxw.com/archives/2020/02/29/922.html
转载请保留本文链接,谢谢