C语言:按位运算
- C有这些按位运算的运算符
- & 按位的与
- | 按位的或
- ~ 按位取反
- ^ 按位的异或
- << 左移
- >> 右移
按位与&
-
(x) == 1并且(y) == 1,那么(x & y) == 1
-
否则的话(x & y) = 0
-
按位与常用于两种应用:
- 让某一位或某些位为0 : x & 0xFE
- 取一个数种的一段: x& 0xFF
按位取或|
-
如果(x) == 1或(y) == 1,那么(x | y) =1
-
否则的话, (x | y) == 0
-
按位或常用于两种应用
- 使得一位或几个为1: x|0x01
- 把两个书拼起来: 0x00FF | 0xFF00
1010 1010 AA
| 0101 0100 54
-----------------
11111 1110 FE
按位取反 ~
- (~x) = 1- (x)
- 把1位变0,0位变1
- 想得到全部位1的数:~0
- 7的二进制是0111, x|7使得低3位为1,而
- x & ~7,就使得低3位为0
逻辑运算 VS 按位运算
- 对于逻辑运算,它只看到两个值:0和1
- 可以认为逻辑运算相当于把所偶非0值变成1,然后做按位运算
- 5 & 4 —> 4 而 5 && 4 —> 1 & 1 —> 1
- 5 | 4 —> 5 而 5 || 4 —> 1 | 1 —> 1
- ~4 —> 3 而 !4 —> !1 —> 0
按位异或 ^
- 如果(x) == (y) , 那么(x ^ y) = 0
- 否则的话,(x ^ y) == 1
- 如果两个位相等,那么结果为0;不相等,结果为1
- 如果x和y相等,那么x ^ y的结果为0
- 对于一个变量用同一个值异或两次,等于什么也没做
- x ^ y ^ y —>x
网友评论