首页 理论教育 移位运算符和使用方法

移位运算符和使用方法

时间:2023-10-23 理论教育 版权反馈
【摘要】:有两种类型的位移位操作:左移位,使用“<<”运算符;右移位,使用“>>”运算符。移位运算符是使用以下语法的二进制运算符:result=valueToShift<<numberOfPositionToShift//left shiftandresult=valueToShift>>numberOfPositionToShift//right shiftLet's take a look at each of these operators.按位左移(<<)。按位左移运算符只是将数位数据向左移到N位,其中N是要移动位的数。也就是说,当向左移位时,高位位置的数都会丢失。也就是说,乘法和除法运算可以通过许多汇编级指令获得结果。然而,移位寄存器的内容是一个复杂过程的单一指令。

移位运算符和使用方法

Arduino C允许你对操作数的位进行移位操作。有两种类型的位移位操作:(1)左移位,使用“<<”运算符;(2)右移位,使用“>>”运算符。移位运算符是使用以下语法的二进制运算符:

result=valueToShift<<numberOfPositionToShift//left shift

and

result=valueToShift>>numberOfPositionToShift//right shift

Let's take a look at each of these operators.

(1)按位左移(<<)。

按位左移运算符只是将数位数据向左移到N位,其中N是要移动位的数。例如:

byte a=5;//000000101

byte result=a<<1;//000001010=result

在上例中,数据向左移动一个位置。这会将a的值从5更改为10。这种操作出现了有趣的事:将位向左移动一个位置将原始数值乘以2。例如:

byte result=a<<2;//000010100=result(www.xing528.com)

将a向左移动两个位,如果将二进制值转换为result,你会发现结果等于20。因为每个位置的值都是原来的两倍,所以两个位置的乘数为4(即2×2=4),最终的值为20(即5×4=20)。如果将位移位三个位置,则结果为40(即5×2×2×2=40)。

对于左移倍增操作结果,需要注意的是:每次移动的最顶端位“从左端脱落”。也就是说,当向左移位时,高位位置的数都会丢失。因此,如果将数据的任何字节向左移位八个位置,则该值将为0,因为你将字节中的所有数据“过度移位”造成的。

(2)按位右移(>>)。

按位右移正好是按位左移的对立操作。右移时,每个位向右移动一个位置。最低位的任何数据也会“从右端脱落”。例如:

byte a=10;//000001010

byte result=a>>1;//000000101=result

正如你所期望的,向右移动一位会产生除以2的效果。但是,如果我们取上面5的结果并将其再向右移动一个位置:

byte a=10;//000000101

byte result=a>>1;//000000010=result

这也是一个除以2的操作,但最低位在移位过程中丢失,因此结果是2,而不是2.5,这是因为整数除法不能有小数,位移位是寄存器级的一种极快操作。也就是说,乘法和除法运算可以通过许多汇编级指令获得结果。然而,移位寄存器的内容是一个复杂过程的单一指令。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈