C++:左移位和右移位

位运算是什么?

位运算时针对一个数的二进制进行的不同运算。在进行位运算时,所有数均为二进制数。位运算通常比普通的运算方式效率更高,因为进行位运算时,无需把计算机中存储的二进制数转换为十进制。

位移

位移有两个符号,一个是“<<"表示向左移位,一个是”>>"表示向右移位。我们将用例子来熟悉位移的过程。

左移位

例子1:计算6<<1

首先,位运算就是数二进制的运算。我们需要把6转换为二进制数,这里就不详细说怎么转换进制了。6的二进制是110。

接下来,我们就要分析6<<1中1的作用。这里的1指的是让6的二进制数向左(<<)移动1位。

110向左移动一位就是1100,在数的最右边添加一个0。

现在,我们要把1100转换为十进制数。同样,这里就不详细描写过程了,1100的十进制数是12。

因此,6<<1就是12。

例子二:9<<2。

我们要把9转换成二进制数。9的二进制是1001。

接下来,我们要把1001向左移两位。这也就是说,我们在1001的最右边添加两个0。

现在,我们得到了100100。我们要把这个二进制数转换为十进制数。100100的十进制就是36。

规律

经过两个例子,我们可以发现,6<<1=6x21=12,而9<<2=9x22=36。也就是说,我们将一个数字左移a位,我们就将这个数乘以2a

右移位

例子一:6>>1

刚才,我们看了6<<1的计算过程。现在,我们来看6>>1的值。

我们先把6转换为二进制,也就是110。

接下来,我们要把110向右移动一位,也就是把110变成011。当我们说把一个数向右移动一位,我们就是要把该数字的最后一位去掉,并且在最高位前面加一个0。

现在,我们得到了011。我们要把011转换为十进制数。011的十进制数就是3。因此,6>>1=3。

例子二:9<<2

刚才,我们看了9<<2的计算过程。现在,我们来看9>>2的值。

我们先把9转换为二进制,也就是1001。

接下来,我们要把1001向右移动2位,也就是把1001变成0010。当我们说把一个数向右移动2位,我们就是要把该数字的最后2位去掉,并且在最高位前面加2个0。

现在,我们得到了0010。我们要把0010转换为十进制数。0010的十进制数就是2。因此,9>>2=2。

规律

通过以上两个例子,我们难免发现一些规律,又有一些疑惑。

  1. 6>>1=6/21=3
  2. 9>>2并不等于9/2
    实际上,9>>2就是9/22后的最近整数值,也就是2。

总结

通过以上左移位和右移位的两个例子,我们认识到了这两者之间的共同点和差异。
将整数b左移a位(b<<a),得到的值与b x 2a的值相同。
将整数b右移a位(b>>a),得到的值与b/2a的值取最近整数的整数值相同。

感谢阅读。

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值