美文网首页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