__ll_rshift
Específicos do Microsoft
Desloca um valor de 64 bits especificado pelo primeiro parâmetro para a direita por um número de bits especificado pelo segundo parâmetro.
__int64 __ll_rshift(
__int64 Mask,
int nBit
);
Parâmetros
[in]Mask
O valor inteiro de 64 bits para deslocar para a direita.[in]nBit
O número de bits de turno, módulo 64 em x64 e módulo 32 no x86.
Valor de retorno
A máscara deslocados em nBit bits.
Requisitos
Intrínseca |
Arquitetura |
---|---|
__ll_rshift |
x86,x64 |
Arquivo de cabeçalho <intrin.h>
Comentários
Se o segundo parâmetro é maior que 64 em x64 (32 no x86), esse número é obtido de módulo 64 (32 no x86) para determinar o número de bits shift. O ll prefixo indica que esta é uma operação em long long, outro nome para __int64, o tipo integral assinado de 64 bits.
Exemplo
// 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;
}
Saída
ffffffffffffff00
- 100
fffffffffffffff0
- 10
Nota se _ull_rshift tem sido usado, o MSB do valor deslocadas direita teria sido zero, para que o resultado desejado não poderia ter sido obtido no caso de um valor negativo.