2016-05-18 4 views
-4

私は19桁の数字(64ビットと常に19桁)を取得し、2 32ビットintに変換する必要があります。64ビットの数値から2の32ビット

2 32ビットは19桁の数字に変換できる必要があります。

アイデアはありますか?あなたがシフトすることによって、それを行うことができます

答えて

1

#include "stdio.h" 

uint64_t bigNum = 5678216589648569852; 
uint64_t merged = 0; 

uint32_t partA = 0; 
uint32_t partB = 0; 

//split 
partA |= bigNum; 
partB |= bigNum >> 32; 

//merge 
merged = partB; 
merged <<= 32; 
merged |= partA; 
+0

符号付き整数を右シフトは、実装定義の動作です。 – owacoder

+0

私はそれがここで大きな問題ではないと思う。たぶん32ビットのものが分割とマージの間に使われているかもしれません。 32ビットintの内容が使用されていない場合、それは重要ではありません。私は、*分割はちょうど32ビットしかサポートしない何らかのプロトコルでintを送ることです。 –

+0

また、符号付き整数の使用には別の問題があります。 'partA'または' partB'が負の値になると、 'a64'や' b64'の上位ビットに影響し、誤った結果になります。原則として、ビット単位の演算には常に符号なし整数を使用します。 – owacoder

関連する問題