C语言学习 - 位操作运算符

2019-03-01  本文已影响0人  Hyso

位运算是两个变量的二进制进行运算。

位或运算符
#include <stdio.h>

int main(void)
{
    int a = 8;
    int b = 7;

    printf("%d", a|b);

    return 0;
}

以上程序输出:

15

解析:
8的二进制表示方式为1000,7的二进制表示方式为01111,8|7 = 15即:

  1000
| 0111
= 1111
位与运算符
#include <stdio.h>

int main(void)
{
    int a = 8;
    int b = 7;

    printf("%d", a&b);

    return 0;
}

以上程序输出:

0

解析:
8的二进制表示方式为1000,7的二进制表示方式为01111,8&7 = 0即:

  1000
& 0111
= 0000
位异或运算符
#include <stdio.h>

int main(void)
{
    int a = 8;
    int b = 7;

    printf("%d", a^b);

    return 0;
}

以上程序输出:

15

解析:
8的二进制表示方式为1000,7的二进制表示方式为01111,8^7 = 15即:

  1000
^ 0111
= 1111
位非运算符
#include <stdio.h>

int main(void)
{
    int a = 8;

    printf("%d", ~a);

    return 0;
}

以上程序输出:

-9

解析:
在内存中,数值都是以二进制补码形式保存的。正数的补码和原码一样,负数求补码的规则为符号位不变,将剩余位取反,得到反码,在反码的基础上最后一位加1。
8的二进制表示方式:0000,0000,0000,0000,0000,0000,0000,1000
~8的二进制表示方式:1111,1111,1111,1111,1111,1111,1111,0111
符号位(最左边位)为1,表示负数,按照负数求补码的规则,符号位不变,将剩余位取反,得到反码:
1000,0000,0000,0000,0000,0000,0000,1000
在反码的基础上最后一位加1:
1000,0000,0000,0000,0000,0000,0000,1001

移位运算
#include <stdio.h>

int main(void)
{
    int a = 10;
    int b = 40;

    printf("a<<5:%d\n", a<<5);
    printf("b>>3:%d\n", b>>3);

    return 0;
}

以上程序输出:

a<<5:320
b>>3:5
上一篇下一篇

猜你喜欢

热点阅读