当前位置:网站首页>按位逻辑运算符

按位逻辑运算符

2022-07-06 08:22:00 踏破铁鞋无觅处,bug一写一上午

一、按位取反:~

在计算机中,数据都是按照二进制进行存储的,即便有了原码、反码、补码。而二进制数在内存中是以补码的形式存储的。

按位取反是将补码的每一位都取反,即0变1,1变0;

#include <stdio.h>
int main()
{
    
    char a = 5;
    printf("%d", ~a);
    return 0;
}

结果为-6;

正整数:5
正数的原码、反码、补码相同:00000101
按位取反:11111010	//此时取反的结果为原码,还需要将其转化为补码
反码:10000101
补码:10000110			
结果:-6


负整数:-5
原码:10000101
反码:11111010
补码:11111011
按位取反:00000100		//此时取反的结果为原码,因为原码为正数,原反补相同
结果:4

正数按位取反等于其本身+1的负数
负数按位取反等于其本身+1的正数
0按位取反为-1

二、按位与:&

[规则]
0&0=0
0&1=0
1&0=0
1&1=1
#include <stdio.h>
int main()
{
    
    char a = 5,b=9;
    char c = a&b;
    printf("%d", c);
    return 0;
}

结果为1

5的补码:00000101
9的补码:00001001
按位与后结果:00000001		//此时的结果为原码,因为原码为正数,原反补相同
结果:1

三、按位或:|

[规则]
0|0=0
0|1=1
1|0=1
1|1=1
#include <stdio.h>
int main()
{
    
    char a = 5,b=9;
    char c = a|b;
    printf("%d", c);
    return 0;
}

结果为13

5的补码:00000101
9的补码:00001001
按位或后结果:00001101			//此时的结果为原码,因为原码为正数,原反补相同
结果:13

四、按位异或:^

[规则]
0^0=0
0^1=1
1^0=1
1^1=0
#include <stdio.h>
int main()
{
    
    char a = 5,b=9;
    char c = a^b;
    printf("%d", c);
    return 0;
}

结果为12

5的补码:00000101
9的补码:00001001
按位与或后结果:00001100		//此时的结果为原码,因为原码为正数,原反补相同
结果:12
原网站

版权声明
本文为[踏破铁鞋无觅处,bug一写一上午]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_45939085/article/details/125050606