我总是对这两个运算符感到困惑,我不知道是什么让这个数字变小或变大。
有人可以告诉我如何记住每个运算符的作用吗?(标志,一些例子等)
将它们视为向上或向下“推”位的箭头。
运算符将<<
通过将位向上推向一个字节中的较高值槽来增加数字的大小,例如:
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 位(这也有一个有符号的解释,但它通常并不重要)。
移位在二进制中的工作方向与在十进制中的工作方向相同。左移 (1, 10, 100, ...) 使数字变大。右移使数字变小。
<< 是左移运算符。例如 0b10 << 2 = 0b1000 (由 0b 语法组成)。>> 是右移运算符,相反。0b10 >> 1 = 0b1。对于有符号的数字右移,符号不会改变。对于带符号的左移,您必须了解2 的补码才能了解发生了什么。
<< --- it tells going left direction and this means left side decreasing.
>> --- it tells going right direction and this means right side decreasing.