2009-06-17 4 views
1

これはMSVCこのC++マクロは何をしますか?

#define Get64B(hi, lo) ((((__int64)(hi)) << 32) | (unsigned int)(lo)) 

のために具体的に、 '演算子< <' の役割は何であるのか?あなたの助けのための

おかげ

+0

ありがとうございます。これがコードで使用されていた方法は、2つの数字から2つの32ビットの数字である大部分の人のように、一意のIDを作成することです。 – fadini

答えて

17

< <は左シフト演算子です。このマクロは、最初の引数を上位32ビットとして使用し、2番目の引数を新しい値の下位32ビットとして、2つの32ビット値から64ビット値を作成することを意図しています。

3

2つの32ビット整数を取り、64ビット整数を返します。最初のパラメータは32の上位ビット、2番目のパラメータは32の下位ビットです。

< <は左シフト演算子です。それは上位32ビットをとり、それらをシフトし、その結果を下位ビットと論理和します。

2

オペレータ< <は、バイナリの左シフト演算子です。 int64変数hiを32ビット左にシフトします。

0

ビットは、hiの値を32ビット左にシフトします。

0

左シフト操作者、及び(数タイプの)その標準的な意味は、左

int a = 1; 
int b = a << 3; // b is now 1000 binary, 8 decimal 

にビットシフトされたコードは、2つの32ビット数のうちの64ビット番号を生成します。

2

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; 
} 
0

として書き込ま理解しやすくすることができ、一方はデHI順序バイト及び下位バイトである第2の一つとして使用されます。

hi < < 32は整数を64ビット整数の上位バイトに変換します。例:

Get64B(11111111111111110000000000000000、000000000000000011111111111111111)

戻り11111111111111110000000000000000000000000000000011111111111111111

ため11111111111111110000000000000000の< < 32戻り

-1

戻り2 8,16,32の64ビット整数または64ビット整数。 これはより安全です:hi < < 32 | lo

+0

最初に32ビットを64ビットintにキャストせずに32ビットだけシフトすると、オーバーフローします。 –

+0

これは私が説明しているものです。最初にhiを64ビットにキャストする必要があります。これは、(__int64)hiによって行われます。書き込むのは安全ではありません:h << 32 | lo。 hiとloが "unsigned char"、 "unsigned short"または "unsigned"の場合、マクロは "(__int64)hi << 32 | lo"に簡略化できます。 – bill

関連する問題