【算法通关村】算法通关村——位运算

二进制表示数

机器数:一个数在计算机中的二进制表示形式。带符号,最高位表示符号。正数0,负数1。

真值:去掉符号位,表示的数。

原码:符合位+真值绝对值。

反码:正数,本身。负数,符号位不变,其余取反。

补码:正数,本身。负数,原码基础上,符号位不变,其余取反,最后+1

为什么会有反码和补码?

人觉得原码挺好,根据符合位判断符合,根据真值计算加减。

但是计算机,只会加法,1-1==1+(-1)=0,这样设计简单。

-0是什么?好奇怪,0没有符号,但是有两种表示方式,00000000,10000000,好浪费啊。

于是补码来了

完美!

除此之外,这样0用00000000表示,而1000000可以表示-128

这样使用补码表示的范围为[-128,127]。

32位int类型,可以表示范围是[-2^{31} ,2^{31}]。

位运算规则

与、或、异或和取反

移位运算

左移右移。算术移位逻辑移位。

  • 左移,高位丢弃,低位补0。算术移位<<和逻辑<<<移位相同。

  • 右移,低位丢弃,高位补位:

    • 算术右移>>,考虑符号位,高位补符号位;

    • 逻辑右移>>>,高位补0。

    • 0和正数,算术右移和逻辑右移的结果是相同的。

移位运算与乘除法的关系

左移,乘法。将一个数左移k位,等价于将这个数乘以2^k。当乘数不是2的整数次幂时,可以将乘数拆成若干项2的整数次幂之和,例如,a*6等价于(a<<2)+(a<<1)。

右移,除法。同理。结果向下取整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值