2012-09-27 49 views
0

我总是困惑于这两个运营商之间,我不知道是什么让 的数字越来越小。总是困惑于<< and >>

有人可以告诉我如何记住每个操作员的操作? (符号,一些示例等)

+0

有人可能会指出,在这种情况下,排序是否重要?我的意思是,“LittleEndian <<等于'BigEndian >>'? MiddleEndian呢? – elmigranto

回答

1

把它们想象成“向上”或“向下”位移动的箭头。

<<操作者将通过推动比特向上朝着一个字节中的更高的值槽增加的数量的大小,例如:

128 64 32 16 8 4 2 1 
------------------------------- 
0 0 0 0 0 1 0 0 before push (value = 4) 
0 0 0 0 1 0 0 0 after << push (value = 8) 

>>操作者将通过推动比特减少的数量的大小下来,对一个字节中的较低值插槽,例如:

128 64 32 16 8 4 2 1 
------------------------------- 
0 0 0 0 0 1 0 0 before push (value = 4) 
0 0 0 0 0 0 1 0 after >> push (value = 2) 
+0

您也应该包括操作说明。我的意思是,人们很容易在2 << 4 and 4 >> 2之间感到困惑。不是吗? – Prasanth

0

在二进制中的位移与十进制中的方向相同。左移(1,10,100,...)使数字变大。向右移动使得数字变小。

0

< <是左移运算符。例如0b10 < < 2 = 0b1000(构成0b语法)。 >>是右移操作符,它恰恰相反。 0b10 >> 1 = 0b1。符号不会因签名数字右移而改变。对于左手签名,您必须了解2's complement以了解发生了什么。

0
<< --- it tells going left direction and this means left side decreasing. 

>> --- it tells going right direction and this means right side decreasing. 
1

你真的不能认为它们是使数更大或更小。取决于输入,这两种移位都可以使数字变大或变小。

  • 左移位(无符号的解释):0位可以脱落的左侧,使得数更大,或1位即可脱落左侧,使得数量少。
  • 左移(有符号解释):0位可以移入先前为0的符号,使数字变大;一个0位可以移入先前为1的符号,使得数字更大; 1位可以移入先前为1的符号,使得数字更小;一个1位可以移入先前为0的符号,使得数字更小。
  • 无符号右移:好的这个很简单,数字变小了。
  • 签名右移:负数变大,正数变小。

我为左移而不是右移写“解释”的原因是只有一种左移,但取决于您是否将结果解释为有符号或无符号,它具有“不同的“结果(当然这些位是相同的)。但是实际上有两种不同的右移,一种是保持符号,而右无符号右移只是0位(也有一个有符号的解释,但通常并不重要)。