【发布时间】:2013-03-10 23:56:06
【问题描述】:
我正在通过将一些 C++ 函数移植到 .NET 的 BigInteger 来独立研究位移。我注意到当我移动 BigInteger 时,空白被填充了。
我相信这与以二进制补码形式存储的负数有关。
BigInteger num = -126;
compactBitsRepresentation = (uint)(int)(num << 16);
这是移位后发生的事情(最高有效位在前)
10000010 will be shifted 16
11111111100000100000000000000000 was shifted 16
我应该总是期望类似的位移操作以这种方式起作用吗?这是否与 OpenSSL 等“bigNumber”的不同语言和实现一致?
【问题讨论】:
标签: c++ .net biginteger bit-shift twos-complement