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.

_BitScanForward, _BitScanForward64

Microsoft Specific

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

unsigned char _BitScanForward(
   unsigned long * Index,
   unsigned long Mask
unsigned char_BitScanForward64(
   unsigned long * Index,
   unsigned __int64 Mask


[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


x86, IPF, x64


IPF, x64

Header file <intrin.h>

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

#pragma intrinsic(_BitScanForward)

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


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

END Microsoft Specific

Community Additions

© 2015 Microsoft