Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All
Expand Minimize
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here.

_BitScanReverse, _BitScanReverse64

Microsoft Specific

Search the mask data from most significant bit (MSB) to least significant bit (LSB) for a set bit (1).


unsigned char _BitScanReverse(
   unsigned long * Index,
   unsigned long Mask
);
unsigned char _BitScanReverse64(
   unsigned long * Index,
   unsigned __int64 Mask
);

Parameters

[out] Index

Loaded with the bit position of the first set bit (1) found.

[in] Mask

The 32-bit or 64-bit value to search.

0 if the mask is zero; nonzero otherwise.

If a set bit is found, the bit position of the first set bit found is returned in the first parameter. If no set bit is found, 0 is returned; otherwise, 1 is returned.

Intrinsic Architecture

_BitScanReverse

x86, IPF, x64

_BitScanReverse64

IPF, x64

Header file <intrin.h>

// BitScanReverse.cpp
// compile with: /EHsc
#include <iostream>
#include <intrin.h>
using namespace std;

#pragma intrinsic(_BitScanReverse)



int main()
{
   unsigned long mask = 0x1000;
   unsigned long index;
   unsigned char isNonzero;
   
   cout << "Enter a positive integer as the mask: " << flush;
   cin >> mask;
   isNonzero = _BitScanReverse(&index, mask);
   if (isNonzero)
   {
      cout << "Mask: " << mask << " Index: " << index << endl;
   }
   else
   {
      cout << "No set bits found.  Mask is zero." << endl;
   }
}

12

Enter a positive integer as the mask: 
Mask: 12 Index: 3

END Microsoft Specific

Community Additions

ADD
Show:
© 2015 Microsoft