2

32 ビットの数値に同じ数値を掛けて 2 の累乗を取得しています。次に、特定のビットを取得して残りを残したいのですが、結果は丸められ、正確ではありません。

たとえば、fec2b8f7 × fec2b8f7 = fd86fb26fffffe51(16 進表記で) 計算したいものは、MATLAB では次のようになります。

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

ans =   
   fd86fb26fffffe51

どちらが正しい。この 64 ビットの 16 進数から上位 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 に答える