|
|
1
8
换档不起作用
这是真的,但只是故事的一半。你看,数字在你的CPU里有一个固定的大小。对于整数,这是32位,但为了更简单,让我们假设8位数字。你的11看起来像这样:
在你移动之后,第一个位子被“移出”。没有空间来存放那一小块。另外,最后一位是“空”,我们不能存储“空”。只有一个或零个。取而代之的是,我们“移入”零点。所以你最终
右移1:
同样,每一位右移1,左边有一个空位,和前面一样,正好变成零。在右边,一个被移了出来,没有空间来存放它。只是丢了。我们的最终数字是:
对于无符号数(也称为 . 在二的补码系统中,对于有符号数,它使用所谓的 算术右移 |
|
|
2
3
|
|
|
3
3
有几种方法来看待它。
左移一位
32位整数也会发生同样的情况:最左边的位会脱落。 右移也会发生同样的情况:右边的钻头脱落。 如果原件是:
然后在左侧添加一个位创建一个9位的值,这是不受支持的。相反,加上的零将所有位向右推一位,最右边的位将脱落,结果是
另一种看待它的方法是乘法和除法。在小数中,当我们乘以10时,右边加一个零。左移类似于乘法,但对于二进制。当我们除以10时,我们去掉最右边的数字,把它放在小数部分。对于正二进制和右移,它是相同的,我们只是失去分数。 注意,负数在C++中更复杂。例如, left shifting a negative is undefined |
|
|
4
1
假设我们有一个数字(我们会让它变得简单,比如
我们取了一个数,把每一列的值放在列中
到目前为止和我在一起?很好。 现在,右班做什么?它的作用正好相反,它把x列空间中每一列的值放到它的 正确的 . 例如:
注:
位移位将切断任何在数据边界上移位的位,如
|
|
|
5
1
你开始的时候
|
|
|
John Proctor · C中位的掩蔽范围 8 年前 |
|
|
Jakey · C枚举定义中的按位移位有什么作用? 8 年前 |
|
|
Areg Sarvazyan · 从无符号int中提取位的函数 8 年前 |
|
|
goodvibration · 实施安全左移 8 年前 |
|
|
AesSedai101 · Kotlin'shl'不工作 8 年前 |
|
|
Sam Hammamy · 如何在位运算中选择正确的左移位? 8 年前 |