0

我总是对这两个运算符感到困惑,我不知道是什么让这个数字变小或变大。

有人可以告诉我如何记住每个运算符的作用吗?(标志,一些例子等)

4

5 回答 5

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)
于 2012-09-27T08:27:27.240 回答
1

您不能真正将它们视为使数字变大或变小。这两种转变都可以使数字更大或更小,具体取决于输入。

  • 左移(无符号解释):0 位可以从左侧脱落,使数字更大,或者 1 位可以从左侧脱落,使数字更小。
  • 左移(有符号解释):可以将 0 位移到之前为 0 的符号中,使数字变大;可以将 0 位移入之前为 1 的符号,使数字更大;可以将 1 位移入之前为 1 的符号,使数字更小;可以将 1 位移入以前为 0 的符号,使数字小得多。
  • 无符号右移:好的,这个很简单,数字变小了。
  • 有符号右移:负数变大,正数变小。

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

于 2012-09-27T10:24:19.203 回答
0

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

于 2012-09-27T08:24:30.937 回答
0

<< 是左移运算符。例如 0b10 << 2 = 0b1000 (由 0b 语法组成)。>> 是右移运算符,相反。0b10 >> 1 = 0b1。对于有符号的数字右移,符号不会改变。对于带符号的左移,您必须了解2 的补码才能了解发生了什么。

于 2012-09-27T08:24:31.073 回答
0
<< --- it tells going left direction and this means left side decreasing.

>> --- it tells going right direction and this means right side decreasing.
于 2012-09-27T08:30:55.550 回答