2023-11-09 bigbai
1、国庆给自己放了个小长期二十几天,回来继续更新专栏。上一篇文章我们说了里的二进制,知道了计算机是以0和1来处理数据的,在阅读源码的过程中,经常会看到这些符号<< ,>>,>>>,这些符号在中叫移位运算符,在写代码的过程中,虽然我们基本上不会去写这些符号,但需要明白这些符号的运算原理,比如中有以下代码:。
2、上段代码中就包含左移运算符<<,无符号右移运算符>>>。这篇文章详细说一下这三个符号:。1、左移运算符:<<。先随便定义一个类型的数,十进制的 = ,转换成二进制在计算机中的表示如下:。
3、 << 1。左移1位后换算成十进制的值为:,刚好是的两倍, 有些人在乘2操作时喜欢用左移运算符来替代。
4、 << 8,左移8位看一下:。左移8位后变成了十进制的值为:-,移动8位后,由于首位变成了1,也就是说成了负数,在使用中要考虑变成负数的情况。
5、根据这个规则,左移32位后,右边补上32个0值是不是就变成了十进制的0了。答案是,当类型进行左移操作时,左移位数大于等于32位操作时,会先求余,%,后再进行左移操作。也就是说左移32位相当于不进行移位操作,左移40位相当于左移8位,40%32=8,当类型进行左移操作时,类型在二进制中的体现是64位的,因此求余操作的基数也变成了64,也就是说左移64位相当于没有移位,左移72位相当于左移8位,72%64=8,写一段代码来测试一下。
1、由于,在二进制中的表现比较特殊,因此不能来进行移位操作,报错注意:其它几种整形,移位前会先转换为类型,32位,再进行移位,这里就不写代码测试了,大家有兴趣可自行测试。综上所述:左移 << 其实很简单,也就是说丢弃左边指定位数。
2、2、右移运算符:>>。右移1位后换算成十进制的值为:,刚好是的1半,有些人在除2操作时喜欢用右移运算符来替代。>>8,右移8位看一下。
3、写一段代码测试一下。和左移一样,类型移位大于等于32位时,类型大于等于64位时,会先做求余处理再位移处理,移位前会先转换为类型,32位,再进行移位。以上是正数的位移,我们再来看看负数的右移运算,如图,负数:-的二进制表现如下图:。
4、综上所述:右移运算符>>的运算规则也很简单,丢弃右边指定位数,左边补上符号位。3、无符号右移运算符:>>>。无符号右移运算符>>>和右移运算符>>是一样的,只不过右移时左边是补上符号位,而无符号右移运算符是补上0,也就是说,对于正数移位来说等同于:>>,负数通过此移位运算符能移位成正数。以->>>8为例来画一下图。
5、无符号右移运算符>>的运算规则也很简单,丢弃右边指定位数,左边补上0。注:本专栏示例代码已上传至公众号:,需要可自行关注下载。如果喜欢本专栏的系列文章,请为我点赞或顺手分享,您的支持是我继续下去的动力,您也可以在评论区留言想了解的内容,有机会本专栏会做讲解,最后别忘了关注一下我。上一篇:中的二进制-知乎专栏。
原文链接:https://www.bigbai.cc/news/7534.html
本文版权:如无特别标注,本站文章均为原创。