位运算的原理和应用

计算机中,每一个数都是用补码来表示的(为了将减法变成加法,方便计算,原理的话以时钟为例:假设现在是1点,我想拨到3点,既可以顺时针拨2个跨度,也可以逆时针拨11个跨度,+2是不是和
-(12-2+1))的效果一样呢?
二进制的最高位为符号位,1代表负数,0代表正数,其余位表示数的绝对值

123转为二进制补齐后为:00000000 00000000 00000000 01111011,这是123的原码。
负数的原码按照绝对值转为二进制后,最高位补1。
-123的原码:10000000 00000000 00000000 01111011

反码:正数的反码和原码相同,负数的反码为原码除最高位外取反(0变1,1变0)。

补码:正数的反码和原码相同,负数的补码为原码除最高位外取反+1。

123的原码:00000000 00000000 00000000 01111011
123的反码:00000000 00000000 00000000 01111011
123的补码:00000000 00000000 00000000 01111011

-123的原码:10000000 00000000 00000000 01111011
-123的反码:11111111 11111111 11111111 10000100
-123的补码:11111111 11111111 11111111 10000101

已知补码求解码
最高位如果是1的话(负数),那么除了最高位之外的取反,然后加1得原码。

最高位如果是0的话,不变,正数的补码就是他的原码。

移位:
左移运算符<<

a<<n 将a的二进制数据左移b位,右边移空的部分补0

可以理解为数字a= a2^n(移了n位)。5<<2 -->52^2=20 -5<<2^2=-20

a>>n 将a的二进制数据右移b位,如果最高位是0,则左边移空的部分补0,如果最高位是1,则左边移空的部分补1

可以理解为数字a= a/2^n(移了n位),向下取整。5>>2 —> 5/2^2=1; -5>>2 --> -5/2^2=-2 (向下取整)

a>>>n 不管最高位是0或1,左边移空部分都补0

移位有什么用?
转自知乎
移位的奇淫技巧

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值