我正在编写一个实现Booth's Algorithm以增加整数的程序。我只允许使用位级运算符,逻辑运算符和位移。我被允许一个循环的程序,以及一个将添加两个整数的函数。 我无法理解程序出了什么问题。当我使用按位运算符来屏蔽长long的一半时,我得到的值不正确。我在做什么错误的建议?也许我不明白如何正确掩盖。它也可能与类型铸造有关;我真的不确定。在此先感谢您的帮助!
以下是代码:
TimedRotatingFileHandler
答案 0 :(得分:0)
返回函数Add()可能不是整数类型,但是返回int类型。如果我们添加两个整数可能会导致多于int类型。
答案 1 :(得分:0)
您不需要这些面具来解决问题。如果屏蔽是问题,只是按位或产品和乘法器,它将64位乘积的低32位设置为你想要的“右半”。然后,只需将产品向右移动32位,在加法函数调用中转换为int。这会将64位二进制文件截断为32位二进制文件。
PS。前一天晚上开始Babic的实验室任务可以确保你能够度过一个糟糕的时光......
答案 2 :(得分:0)
除了rslemos注意到的错误之外,还有两件事需要纠正:
0xFFFFFFFF00000000
和0xFFFFFFFFFFFFFFFF
需要带LL
的后缀。向product
添加内容时,添加的值不得进行签名扩展。因此,改变
product = (long long) Add (0, multiplier);
到
product = (unsigned)multiplier; // do not sign-extend multiplier
和
product = (long long) Add((int)product, productRHI);
到
product |= (unsigned)productRHI; // do not sign-extend productRHI
(两次出现)。