位操作符(详解)

本文详细解释了C语言中的位操作符(如按位与、按位或、按位异或和按位取反),介绍了它们基于补码的运算规则,并以实例展示了如何在整数中应用这些操作符。特别强调了位操作符只适用于整数的情况。
摘要由CSDN通过智能技术生成
  • 位操作符一共分为4种:
    &     按位与
        按位或
       按位异或
       按位取反

  • 按位与(&)
    两个数以补码的形式进行计算,对应的补码有0则为0,全1 则1

    //例如
    //4&10
    //10的补码为: 00000000 00001010(整形应该为4个字节,32位比特位,这里为了书写方便,省去了中间的两组0,一下的例子同理)
    //4的补码为:  00000000 00000100
    //那么经过按位与的操作过后结果应该为:
    //    00000000 00000000(转化为10进制则为:0)

    //我们可以使用程序来验证结果的准确性
    #include<stdio.h>
    int main()
    {
    	printf("%d",4&10); 
    	return 0;
    }
  • 按位与( | )
    同理也是以补码的形式进行计算的,不过运算规则是:有1则1,全0则0

    //也拿4和10举例
    //4的补码: 00000000 00000100
    //10的补码:00000000 00001010
    //按位与的操作的结果则为
    //         00000000 00001110(转为为10进制则为:14)
    //我们同样有可以拿代码来验证
    #include<stdio.h>
    int main()
    {
    	printf("%d",4|10); 
    	return 0;
    }
  • 按位异或(^)
    同理,运算规则变为:相同为0,不同为1
     

    //一样的举例4和10
    //4的补码; 00000000 00000100
    //10的补码:00000000 00001010
    //那么经过按位异或的操作结果应该为
    //         00000000 00001110(转为为10进制为:14)
    //我们有可以来验证一下
    #include<stdio.h>
    int main()
    {
    	printf("%d",4^10); 
    	return 0;
    }
  • 按位取反(~)
    同理,运算规则变为:0变为1,1变为0
    按位取反通常用于无符号整数,而在有符号整数中,它可能导致符号位的改变

    //以10为例子
    //10:00000000 00001010
    //按位取反后的结果为 11111111 11110101(这里是很值得注意的地方)
    //因为这里不像上面的其他例子,这里的最高位变成了1,这意味着这个数变成了负数
    //那么我们就应该注意了,负数的原码与补码并不相同
    //故而我们需要进行转化
    //补码:11111111 11110101(取反,再+1得到原码,且符号位是不变的)
    //原码:10000000 00001011(转化为10进制为:-11)
    //一样的我们可以通过代码来验证起准确性
    #include<stdio.h>
    int main()
    {
    	int a =10;
    	printf("%d",~a); 
    	return 0;
    }

  • 最后值得说的就是,关于位操作符的使用对象只能为整数,其他的不适用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值