|
|
1
3
这是补码和定义的一部分。您取任何溢出位,并将其加回到较低的16位。将它们加回去可能会导致进一步的溢出,因此您重复此操作,直到高位全部为零。所以,从概念上讲,它是这样的:
然而,此循环最多只能执行两次,因此不需要显式循环。在第一次加法之后,可能会也可能不会出现进位位位于高位16位的溢出。在这种情况下,高位16位将是
有了两个添加,我们就完成了,因为上面的16位现在已经清楚了。这是最坏的情况,因此循环可以展开为两个加法。
(还有
然后
毕竟,你取了最后一个和的补码,这导致了一个非常令人困惑的名字:补码和的补语。我第一次实现它时花了很长时间才理解这一点,特别是一个人的补码和不涉及
|
|
|
2
4
你几乎是对的。 由于进位,高16位可能是1。
例如,
|
|
|
3
1
我以为ulong是32位宽,这意味着:
将顶部的四位和底部的四位加在一起。然后下一行对前16位的结果求和;由于携带操作,其中可能有一个。 |
|
no one special · 32位整数缩放,无溢出 8 年前 |
|
|
Benn Tan · 比特操作:更难翻动硬币 8 年前 |
|
|
Ganesh Thampi · 使用位运算符将十进制转换为二进制 8 年前 |
|
|
Ganesh Thampi · 使用位的奇偶程序 8 年前 |
|
|
datapanda · 三维网格的莫顿反向编码 8 年前 |
|
|
rubyquartz · 交换无符号短整数的字节 8 年前 |
|
|
John Proctor · C中位的掩蔽范围 8 年前 |
|
|
Areg Sarvazyan · 从无符号int中提取位的函数 8 年前 |
|
|
user9505617 · 按位异或0xFFFFFFFF? 8 年前 |