2013-05-11 91 views
2

我乘以一個32位數字與相同的數字以獲得他們的權力2.然後,我想要得到某些位,剩下的部分,但結果取出四捨五入,並不精確。不正確的64位除法

例如,我想計算fec2b8f7 × fec2b8f7 = fd86fb26fffffe51(16進制數),在MATLAB它出來是這樣的:

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

ans = 
    fd86fb26fffffe51 

這是正確的。從這64位十六進制數我想獲得最高的34位出來,因此要獲得前34位了,你需要擺脫過去的30位的64位,但除以2:

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

ans = 
    00000003f61bec9c 

可悲的是,結果並不正確,因爲它是四捨五入的。正確的結果應該是00000003f61bec9b。

有沒有一種方法可以在沒有四捨五入的情況下從64位數中取出34位?我試過floor,但它在分區操作完成之前不起作用,這會得到不正確的答案。

回答

3

你可以嘗試bitshift

left34 = bitshift(num64, -30) 

(負移位距離右移)

+0

謝謝,工作完美。 – 2013-05-11 16:11:41