算法通关村——位运算青铜挑战

1.青铜挑战——理解位运算的规则

1 数字在计算机中的表示

机器数:一个数在计算机中的二进制表示形式

机器数带符号,在计算机中用一个数的最高位存放符号,正数为0,负数为1.

真值:将带符号位的机器数对应的真正数值成为机器数的真值。

计算机对机器数的表示进一步细化:原码,反码,补码

源码:符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。8位二进制数的取值范围就是:[-127,127]

反码:整数的反码是其本身,

负数的反码是在其原码的基础上,符号位不变,其余各个位取反。

补码:能保持加和减运算的统一

正数的补码就是其本身

负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1(在反码的基础上+1)

补码表示的范围是[-128,127]

机器只有加法,将符号位参与运算,原码的减法不正确,反码真值部分正确,但是+-0没有意义,补码解决了0的符号以及两个编码的问题。

2 位运算规则:

位运算主要有:与,或,异或,取反,左移,右移,左移和右移统称为移位运算,移位运算又分为算术移位和逻辑移位

2.1 与 或 异或和取反

& | ∧ ~

2.2 移位运算

左移和右移:按照移位方向分类

算术移位和逻辑移位:带符号分类

左移一次相当于乘以2,右移一次相当于除以2

左移:<< 高位丢弃,低位补0,算术移位和逻辑移位是相同的

右移:>> 低位丢弃,高位的补位由算术移位(高位补最高位)或逻辑移位(高位补0)决定

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

2.3移位运算与乘除法的关系

计算机的底层一切运算都是基于位运算实现的,因此使用移位运算实现的乘除法的效率显著高于直接乘除法的。

左移运算对应乘法运算,但是要注意溢出的情况

算数右移运算对应除法运算,结果向下取整。将一个算术右移K位和将这个数除以2^k是不等价的,大部分算法题都将测试数据限制在正数和0的情况,因此可以放心的左移或者右移。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值