__ll_rshift

Microsoft 固有の仕様

最初のパラメーターで指定された 64 ビット値を、2 番目のパラメーターで指定されたビット数だけ右にシフトします。

構文

__int64 __ll_rshift(
   __int64 Mask,
   int nBit
);

パラメーター

Mask
[in] 右にシフトする 64 ビット整数値。

nBit
[in] シフトするビット数。x64 では 64 による剰余とし、x86 では 32 による剰余とします。

戻り値

nBit ビット シフトされたマスク。

必要条件

Intrinsic アーキテクチャ
__ll_rshift x86、x64

ヘッダー ファイル<intrin.h>

解説

2 番目のパラメーターが x64 で 64 (x86 で 32) を超える場合は、64 (x86 では 32) による剰余として、シフトするビット数が決定されます。 ll プレフィックスは、64 ビットの符号付き整数型である __int64 の別名である long long に対する操作であることを示します。

// ll_rshift.cpp
// compile with: /EHsc
// processor: x86, x64
#include <iostream>
#include <intrin.h>
using namespace std;

#pragma intrinsic(__ll_rshift)

int main()
{
   __int64 Mask = - 0x100;
   int nBit = 4;
   cout << hex << Mask << endl;
   cout << " - " << (- Mask) << endl;
   Mask = __ll_rshift(Mask, nBit);
   cout << hex << Mask << endl;
   cout << " - " << (- Mask) << endl;
}

出力

ffffffffffffff00
- 100
fffffffffffffff0
- 10

Note

_ull_rshift を使用した場合は、右シフトされた値の MSB が 0 になり、値が負の場合は目的の結果が得られません。

Microsoft 固有の仕様はここまで

関連項目

コンパイラの組み込み
__ll_lshift
__ull_rshift