_BitScanForward, _BitScanForward64
Collapse the table of content
Expand the table of content
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. ArchiveDisclaimer

_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

© 2015 Microsoft