我将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
,但是在除法运算完成之后它才起作用,这得到了错误的答案。