位操作符:&、|、^、~

我理解的就是将十进制整数转换成二进制数,然后进行运算。

  • &:按位与运算

        有0为0,全1为1

        一个整数  5  和  -6
        二进制为:00000000000000000000000000000101

                         10000000000000000000000000000110

        因为计算机是通过补码进行运算的,所以需要求出5和-6二进制的补码.

        正整数的原码、反码、补码相等

        所以5的二进制补码为
        000000000000000000000101

        负数的原码:第一位为1,代表负号,其余的转换成二进制就行了

        10000000000000000000000000000110

         11111111111111111111111111111111001    //-6的反码
        111111111111111111111111111111111010   //-6的补码

        通过补码运算,有0为0,全1为1。
         00000000000000000000000000000101
        111111111111111111111111111111111010

最终得出:00000000000000000000000000000000

        
        

#include <stdio.h>

 

//计算机运算是按补码进行运算的,
int main()
{
int a = 5;
int b = -6;
int c = a & b;//按位与   对应的二进制为,有0为0,两个都为1才是1
//00000000000000000000000000000101   5的二进制  正整数的原码、反码、补码相同
//10000000000000000000000000000110   -6的二进制
//11111111111111111111111111111001   -6的反码
//11111111111111111111111111111010   -6的补码
//用补码,按位与计算
//00000000000000000000000000000101   
//11111111111111111111111111111010
//00000000000000000000000000000000
printf("%d\n", c);
return 0;
}
  •  |   :按位或运算 , 

        有1为1,全0为0

        以21和26举例,

        21和26的补码为:

        0000 0001 0101

        0000 0001 1010

        0000 0001 1111

  • ^:异或运算

        相同为0,不同为1

        以21和26举例,

        21和26的补码为:

        0000 0001 0101

        0000 0001 1010

        0000 0000 1111

  • ~:非运算

     按位取反,0变1,1变0

        8: 0000 1000

      ~8: 1111  0111

       

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值