2

我将一个 32 位数字与相同的数字相乘以获得 2 的幂。然后我想获得某些位并保留其余位,但结果四舍五入而不是精确的。

例如,我要计算的内容fec2b8f7 × fec2b8f7 = fd86fb26fffffe51(以十六进制表示法),在 MATLAB 中是这样的:

>> (((uint64(hex2dec('fec2b8f7'))) * (uint64(hex2dec('fec2b8f7')))))

ans =   
   fd86fb26fffffe51

哪个是对的。从这个 64 位十六进制数中,我想从中获取最高 34 位,因此要从 64 位中获取前 34 位,您需要去掉最后 30 位,但除以 2:

>> (((uint64(hex2dec('fec2b8f7'))) * (uint64(hex2dec('fec2b8f7'))))) / uint64(2^30)

ans =
   00000003f61bec9c

遗憾的是结果不正确,因为它是四舍五入的。正确的结果应该是 00000003f61bec9b。

有没有办法在不四舍五入的情况下从 64 位数字中得到 34 位?我试过floor了,但是在除法操作完成之前它不起作用,得到了错误的答案。

4

1 回答 1

3

你可以试试bitshift

left34 = bitshift(num64, -30)

(负位移距离向右移动)

于 2013-05-11T16:07:57.473 回答