C语言左移<<和右移>>逻辑运算符

逻辑运算符:(要在32位的2进制上做运算)
左移:<<
右移:>>
例如:(整数10的32位二进制)
(左边是高位)0000 0000 0000 0000 0000 0000 0000 1010(右边是低位)
原码:就是直观的二进制表示方式
反码:正数:和原码一样
           负数:符号位不变,其余位按位取反
补码:正数:和原码一样
           负数:符号位不变,反码加一

重点:参与运算的是补码

eg:
左移(<<)的规则:高位丢失,低位补零

int a=10,b;
b=a<<2;//左移两位
10是正数,所以它的补码:0000 0000 0000 0000 0000 0000 0000 1010
结果:0000 0000 0000 0000 0000 0000 0010 1000,等于40
int a=-8,b;
//原码1000 0000 0000 0000 0000 0000 0000 1000
//反码1111 1111 1111 1111 1111 1111 1111 0111
//补码1111 1111 1111 1111 1111 1111 1111 1000(将补码用来运算)
b=a<<3;
结果补码:1111 1111 1111 1111 1111 1111 1100 0000(将补码又当作原码来计算,相当于再求个补码的补码,就是最后得到的数的原码)
结果反码:1000 0000 0000 0000 0000 0000 0011 1111
结果原码:1000 0000 0000 0000 0000 0000 0100 0000(结果等于-64

右移(>>)的规则:
1.正数:低位丢失,高位补零(和左移一样,都是补0)
2.负数:低位丢失,高位补一

int a=-8,b;
//原码1000 0000 0000 0000 0000 0000 0000 1000
//反码1111 1111 1111 1111 1111 1111 1111 0111
//补码1111 1111 1111 1111 1111 1111 1111 1000
b=a>>3;
结果补码:1111 1111 1111 1111 1111 1111 1111 1111
结果反码:1000 0000 0000 0000 0000 0000 0000 0000
结果原码:1000 0000 0000 0000 0000 0000 0000 0001(结果等于-1
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值