excel二进制移位运算_移位运算和乘除运算的关系

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-29 20:53   11   0
这一讲重点讲清楚2个知识点 1、弄清移位运算和乘除运算的关系 十进制的运算,我们都很熟悉了,那么二进制的运算机制是怎样的呢? 其实,四则运算同样也可以使用在二进制中,要注意每逢2进一位即可。 下面我们来学习二进制特有的运算(计算机特有的运算) 什么是移位运算? 移位运算指的是:将二进制数值的各位数进行左右移位(shift=移位)的运算。 ①左移:向高位方向 ②右移:向低位方向 案例 0e0e6c89cef3f75c217e70c639214ae6.png 图示意思:变量a保存十进制39,将左移两位后的结果保存在变量b中。 对于计算机来说,无论移动的是十进制或者十六进制等,在底层都是转换成二进制来操作的。 上面的案例转换成二进制后移位(左移2位)操作如下 ddb4cf4eee9736218bf7cc1d2bf9bebd.png 对上图的说明:无论左移还是右移,溢出的最高位或者最低位直接舍弃。 左移空出的最低位用0补,右移空出的最高位后面讲解。 规律:十进制左移后会变成原来的10倍、100倍、1000倍。。。同样的,对于二进制来说,左移后变成原来的2倍、4倍、8倍。。。。 反之,右移后变成原来的1/2 1/4 1/8等,这从侧面也能反映出移位运算能代替除法运算了。 2、补数 补数概念是为了解决计算机中负数的表示方式 那么什么是补数? 二进制表示负数的原则:最高位作为符号位来表示 最高位为0,表示正数 最高位为1,表示负数 说到这儿可能有些人想,按照上面的原则,-1就表示成10000001,正确答案是11111111。 计算机在做减法运算时,内部转换成加法运算的,为此,表示负数时要使用到二进制中的补数,补数就是用正数来表示负数。 计算机中,一个正数-一个负数=一个正数+这个负数的补数 3、如何获取补数? 获取补数的方法:二进制的各数位的数值全部取反,然后将取反后的数加1. 如用8位二进制表示-1时,只需求得1的补数即可。 1-->00000001 00000001取反11111110 11111110+1=11111111 如下图 02815a826756f293d0ae9d8d99fd5321.png 补数这种思维方式,直观上可能不容易理解,但是逻辑上是很严谨的。 案例1-1=1+(-1)=0 如果把-1表示成10000001,运算结果如下。(错误) 1ef708b8ca53eda70242d6eacb76cb6d.png 如果把-1表示成11111111,运算结果如下。(正确) c8e8968153689cbbfb5663ae09dfaf56.png 补数求解的变换方式就是取反+1 为什么使用补数后就能正确的表示负数呢? 看下图 c8e8968153689cbbfb5663ae09dfaf56.png 运算结果为0 结论:将二进制数的值取反后加1的结果和原来的值相加,结果为0。 注意:当运算的结果为负数时,计算结果也是以补数的形式来表示的。 案例(3-5) 3--00000011 5--00000101 5的补码为11111010+1=11111011 -2用补数表示 2--00000010 2取反11111101 2取反后+1:11111110 7435721c8190f8201313aca8a4faafff.png 4、这一讲我们讲了移位运算和乘除运算的关系和补数,这些知识点对于一个程序员来说,有时候很重要。 明白这些底层机制以后,可以用于代码的优化,提高开发速度等方面。对于非专业人员,了解这些知识可能对你暂时没有用。 但是,如果我们学习什么东西都要追求当前有用,那你的视野可能有些狭隘。 现在很流行的说法是,跨界学习,我所理解的跨界学习是,不要局限于当下,有时候可以学点无用之学,说不定哪天可以在你的领域内解决大问题呢。 下一讲:逻辑右移和逻辑算术右移的区别
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP