看来您对轮班的工作方式存在误解。
换档不add零在左边或右边。你不能只添加数字,只有这么多位。让我们以你的数字为例,十进制数字 11。
整数 n = 11;这是 1011
这是事实,但只是故事的一半。看吧,数字在 CPU 中具有固定的大小。对于整数来说,这是 32 位,但为了更简单,我们假设 8 位数字。你的 11 看起来像这样:
+-+-+-+-+-+-+-+-+
|0|0|0|0|1|0|1|1|
+-+-+-+-+-+-+-+-+
它有 8 位。总是。现在让我们左移 1:
+-+-+-+-+-+-+-+-+
0|0|0|0|1|0|1|1| |
+-+-+-+-+-+-+-+-+
移位后,第一个位被“移出”。没有空间来存储该位。另外,最后一位是“空”,我们不能存储“空”。只有一或零。相反,我们“移入”零。所以你最终会得到
+-+-+-+-+-+-+-+-+
|0|0|0|1|0|1|1|0|
+-+-+-+-+-+-+-+-+
右移则相反。我们再次从 11 开始:
+-+-+-+-+-+-+-+-+
|0|0|0|0|1|0|1|1|
+-+-+-+-+-+-+-+-+
并右移 1:
+-+-+-+-+-+-+-+-+
| |0|0|0|0|1|0|1|1
+-+-+-+-+-+-+-+-+
同样,每个位都右移 1。左侧有一个空位,与之前一样,它只是变为零。右边的那个被移出,没有空间存放它。它只是丢失了。我们最终的数字是:
+-+-+-+-+-+-+-+-+
|0|0|0|0|0|1|0|1|
+-+-+-+-+-+-+-+-+
以上适用于无符号数,也称为无符号数逻辑右移。在二进制补码系统中,对于有符号数,它使用所谓的算术右移,它不是移动零位,而是移动符号位。 IE。如果数字为负数,因此最高有效位为 1,则移入 1,否则移入 0。