これはMSVCこのC++マクロは何をしますか?
#define Get64B(hi, lo) ((((__int64)(hi)) << 32) | (unsigned int)(lo))
のために具体的に、 '演算子< <' の役割は何であるのか?あなたの助けのための
おかげ
これはMSVCこのC++マクロは何をしますか?
#define Get64B(hi, lo) ((((__int64)(hi)) << 32) | (unsigned int)(lo))
のために具体的に、 '演算子< <' の役割は何であるのか?あなたの助けのための
おかげ
< <は左シフト演算子です。このマクロは、最初の引数を上位32ビットとして使用し、2番目の引数を新しい値の下位32ビットとして、2つの32ビット値から64ビット値を作成することを意図しています。
2つの32ビット整数を取り、64ビット整数を返します。最初のパラメータは32の上位ビット、2番目のパラメータは32の下位ビットです。
< <は左シフト演算子です。それは上位32ビットをとり、それらをシフトし、その結果を下位ビットと論理和します。
オペレータ< <は、バイナリの左シフト演算子です。 int64変数hiを32ビット左にシフトします。
ビットは、hiの値を32ビット左にシフトします。
左シフト操作者、及び(数タイプの)その標準的な意味は、左
int a = 1;
int b = a << 3; // b is now 1000 binary, 8 decimal
にビットシフトされたコードは、2つの32ビット数のうちの64ビット番号を生成します。
AakashMです。それは2つの32ビットのintを使用してint型64ビットを返すメソッド
__int64 Get64B(__int32 hi, __int32 lo) {
__int64 combined = hi;
combined = combined << 32; // Shift the value 32 bits left. Combined
// now holds all of hi on the left 32 bits
combined = combined | lo; // Low 32 bits now equal to lo
return combined;
}
として書き込ま理解しやすくすることができ、一方はデHI順序バイト及び下位バイトである第2の一つとして使用されます。
hi < < 32は整数を64ビット整数の上位バイトに変換します。例:
Get64B(11111111111111110000000000000000、000000000000000011111111111111111)
戻り11111111111111110000000000000000000000000000000011111111111111111
ため11111111111111110000000000000000の< < 32戻り
戻り2 8,16,32の64ビット整数または64ビット整数。 これはより安全です:hi < < 32 | lo
最初に32ビットを64ビットintにキャストせずに32ビットだけシフトすると、オーバーフローします。 –
これは私が説明しているものです。最初にhiを64ビットにキャストする必要があります。これは、(__int64)hiによって行われます。書き込むのは安全ではありません:h << 32 | lo。 hiとloが "unsigned char"、 "unsigned short"または "unsigned"の場合、マクロは "(__int64)hi << 32 | lo"に簡略化できます。 – bill
ありがとうございます。これがコードで使用されていた方法は、2つの数字から2つの32ビットの数字である大部分の人のように、一意のIDを作成することです。 – fadini