美文网首页C语言
C语言 第13节 位运算符

C语言 第13节 位运算符

作者: 小超_8b2f | 来源:发表于2019-07-11 19:47 被阅读0次

位运算符

符号 含义 解读
& 按位与
A:0001 0101
B:1101 0110
-------------------
C:0001 0100
A且B,必须2个都是真
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
&& 逻辑与 ''
| 按位或
A:0001 0101
B:1101 0110
-------------------
C:1101 0111
A或B,有一个是真就是真
1 | 1 = 1
1 | 0 = 1
0 | 1 = 0
0 | 0 = 0
|| 逻辑或 ''
~ 按位取反
将变量i的所有二进制位取反
i:(补0)0011
~i:(补1)1100
^ 按位异或 相同为0,不同为1 1 ^ 0 = 1
1 ^ 1 = 0
0 ^ 0 = 0
0 ^ 1 = 1
<< 按位左移
>> 按位右移

按位与分析

5 & 7 = 5
21 & 7 = 5
5 & 1 = 1
5 & 10 = 0
-5 & 10 =

3 | 5
011 3
101 5
111 7

~3
(3,前面补0)0011
(~3,取反,前面补1)1100
(根据补码,负数绝对值是 取反➕1)0100 = 4 所以是 -4


按位与作用

求变量的第n位的值是0还是1

举例:
变量a:我想知道其第1位和第3位的值。可以做信息采集
a & 0101
如果a的第1位和第3位都是1,则按位与结果 是0101
如果a的第1位和第3位都是0,则按位与结果 是0000
所以

#inlude <stdio.h>

int main(void) {
  int i = 5;
  int j = 7;
  int k;

  k = i & j;
  printf("%d\n",k);

# k的值只能是1或零,因为逻辑运算符的结果只能是真(1)或假(0)
  k = i && j;
  printf("%d\n",k);
}

10进制左移右移

123 左移1位:1230 相当于 ✖️10
123 右移1位:12 相当于 ➗ 10

二进制由此类推:

二进制左移相当于 ✖️ 2     左移右侧补零
二进制右移相当于➗2     右移左侧补零 或补1,看最高位是0还是1(一般补零)

左移n位相当于✖️2n
右移不能移动太多,移没了比如:123 右移10位,移没了。

image.png image.png

相关文章

网友评论

    本文标题:C语言 第13节 位运算符

    本文链接:https://www.haomeiwen.com/subject/idbdkctx.html