我将一个 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
了,但是在除法操作完成之前它不起作用,得到了错误的答案。