按位逻辑运算符

本文详细介绍了按位取反(~)、按位与(&)、按位或(|)和按位异或(^)在计算机中的工作原理及其应用实例,包括正负数的补码转换,以及它们如何影响数值运算结果。通过实际代码演示,读者可以理解这些基本操作在编程中的关键作用。
摘要由CSDN通过智能技术生成

一、按位取反:~

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

按位取反是将补码的每一位都取反,即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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值