{二的补码}位移

时间:2017-03-12 12:12:06

标签: bit bit-shift

我对所有这些变化的东西感到困惑,因为我看到了两个不同的移动相同数字的结果。我知道有很多关于这个问题的问题,但似乎我仍然无法找到我想要的东西(随意发布一个问题的链接或一个可能有帮助的网站)。

所以,首先我看到数字13二进制文件如:001101(不是整个字位)。 当应用2向左移位时,它们会保留最后一位(可能是符号位),结果类似于0|10100 = 20。但是在其他地方,我看到数字13表示为:01101,现在01101<<20|0100 = 4。我知道向左移动与乘以基数相同,但这让我感到困惑。我应该13作为001101还是01101并应用转移。 我认为考虑到结果,我们省略了溢出。

谢谢!

2 个答案:

答案 0 :(得分:0)

此行为似乎与长度为5的整数相对应 4(以位为单位,不包括符号位)。所以似乎溢出确实是问题所在。如果不是,您是否可以添加一些关于这些奇怪结果发生的背景?

答案 1 :(得分:0)

00110101101以及110100001101以及其他尺码同样声称&#34;正在&#34; 13.你真的不能说13有一个确定的大小,而是有一个大小的操作(可能是无限的,然后左移从不包装)。

因此,您必须决定您所做的班次大小,与您转移的价值无关。常见的选择是32或64位,但你肯定不限于此,尽管&#34;奇怪&#34;尺寸需要在典型的机器和典型的编程语言中实施。

顺便说一句,标志永远不会故意保留在左移位置,没有任何有用的方法可以做到这一点:强行保持它意味着包装以一种非常奇怪的方式发生,而不是通常的包装模数为2的幂(其中有很好的属性)。