-4
私は19桁の数字(64ビットと常に19桁)を取得し、2 32ビットintに変換する必要があります。64ビットの数値から2の32ビット
2 32ビットは19桁の数字に変換できる必要があります。
アイデアはありますか?あなたがシフトすることによって、それを行うことができます
私は19桁の数字(64ビットと常に19桁)を取得し、2 32ビットintに変換する必要があります。64ビットの数値から2の32ビット
2 32ビットは19桁の数字に変換できる必要があります。
アイデアはありますか?あなたがシフトすることによって、それを行うことができます
:
#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;
符号付き整数を右シフトは、実装定義の動作です。 – owacoder
私はそれがここで大きな問題ではないと思う。たぶん32ビットのものが分割とマージの間に使われているかもしれません。 32ビットintの内容が使用されていない場合、それは重要ではありません。私は、*分割はちょうど32ビットしかサポートしない何らかのプロトコルでintを送ることです。 –
また、符号付き整数の使用には別の問題があります。 'partA'または' partB'が負の値になると、 'a64'や' b64'の上位ビットに影響し、誤った結果になります。原則として、ビット単位の演算には常に符号なし整数を使用します。 – owacoder