操作符详解

符号位都是⽤0表⽰“正”,⽤1表⽰“负”。

正整数的原、反、补码都相同。

负整数的三种表⽰⽅法各不相同

     原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。

     反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。

     补码:反码+1就得到补码。

     补码得到原码也是可以使⽤:取反,+1的操作。

对于整形来说:数据存放内存中其实存放的是补码

1.位操作符(用补码的二进制位进行计算)

.& //按位与 :有0则为0,两个同时为1才为1

    int a = 6;
//00000000000000000000000000000110 - 6的补码

   int b = -7;
//00000000000000000000000000000111
//11111111111111111111111111111000 - 取反
//11111111111111111111111111111001 - 加1 -7的补码

   int c = a & b;
//00000000000000000000000000000110 - 6的补码
//11111111111111111111111111111001 - 加1 -7的补码

//00000000000000000000000000000000  c=0

    |  //按位或:有1则为1,两个同时为0才为0

int a = 6;
//00000000000000000000000000000110 - 6的补码

   int b = -7;
//00000000000000000000000000000111
//11111111111111111111111111111000 - 取反
//11111111111111111111111111111001 - 加1 -7的补码

int c = a | b;
//00000000000000000000000000000110 - 6的补码
//11111111111111111111111111111001 - 加1 -7的补码
//11111111111111111111111111111111
//10000000000000000000000000000000
//10000000000000000000000000000001 c=-1

     ^ //按位异或:相同为0,相异为1(11为0)

     ~ //按位取反:按(二进制)为取反

int a = 0;
printf("%d\n", ~a);
//00000000000000000000000000000000
//11111111111111111111111111111111
//10000000000000000000000000000000
//10000000000000000000000000000001 a=-1

2.移位操作符

  左移操作符(有乘2效果)

移位规则:左边抛弃、右边补0


        int num = 10;
        //0000000000000000000000001010
        int n = num << 1;
        //0000000000000000000000010100
        printf("n= %d\n", n);
        //n=20
        printf("num= %d\n", num);
        //num=10

2 右移操作符

移位规则:算术右移:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值