【发布时间】:2016-05-03 13:24:04
【问题描述】:
我正在阅读 CSAPP 并尝试完成作业问题。假设 w = 32,2.75 是关于通过将两个 32 位无符号整数相乘获得高 32 位。给定函数int signed_high_prod(int x, int y),它计算 x 的高 32 位。 y 适用于 x 和 y 为二进制补码形式的情况。 int signed_high_prod(int x, int y) 应该用于实现unsigned int unsigned_high_prod(unsigned x, unsigned y)。
通过谷歌搜索,我找到了x'.y' = x.y + x.y_31.2^32 + y.x_31.2^32 + x_31.y_31.2^64,其中 x' 和 y' 分别是 x 和 y 的无符号形式。
我还是看不懂答案。
unsigned unsigned_high_prod(unsigned x, unsigned y){
unsigned p = (unsigned) signed_high_prod((int) x, (int) y)
if((int) x < 0){
p += y;
}
if((int) y < 0){
p += x;
}
return p;
}
为什么最后一项对结果没有影响?为什么x < 0 所以x_31 = 1,再加上y?和y一样。
【问题讨论】: