Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.
The latest version of this topic can be found at _bittestandset, _bittestandset64.
Microsoft Specific**
Generate an instruction which examines bit b
of the address a
, returns its current value, and sets the bit to 1.
Syntax
unsigned char _bittestandset(
long *a,
long b
);
unsigned char _bittestandset64(
__int64 *a,
__int64 b
);
Parameters
[in, out] a
A pointer to the memory to examine.
[in] b
The bit position to test.
Return Value
The bit at the position specified.
Requirements
Intrinsic | Architecture |
---|---|
_bittestandset |
x86, ARM, x64 |
_bittestandset64 |
x64 |
Header file <intrin.h>
Remarks
This routine is only available as an intrinsic.
Example
// bittestandset.cpp
// processor: x86, ARM, x64
// This example uses several of the _bittest family of intrinsics
// to implement a Flags class that allows bit level access to an
// integer field.
#include <stdio.h>
#include <intrin.h>
#pragma intrinsic(_bittestandset, _bittestandreset,\
_bittestandcomplement, _bittest)
class Flags
{
private:
long flags;
long* oldValues;
public:
Flags() : flags(0)
{
oldValues = new long[32];
}
~Flags()
{
delete oldValues;
}
void SetFlagBit(long nBit)
{
// We omit range checks on the argument
oldValues[nBit] = _bittestandset(&flags, nBit);
printf_s("Flags: 0x%x\n", flags);
}
void ClearFlagBit(long nBit)
{
oldValues[nBit] = _bittestandreset(&flags, nBit);
printf_s("Flags: 0x%x\n", flags);
}
unsigned char GetFlagBit(long nBit)
{
unsigned char result = _bittest(&flags, nBit);
printf_s("Flags: 0x%x\n", flags);
return result;
}
void RestoreFlagBit(long nBit)
{
if (oldValues[nBit])
oldValues[nBit] = _bittestandset(&flags, nBit);
else
oldValues[nBit] = _bittestandreset(&flags, nBit);
printf_s("Flags: 0x%x\n", flags);
}
unsigned char ToggleBit(long nBit)
{
unsigned char result = _bittestandcomplement(&flags, nBit);
printf_s("Flags: 0x%x\n", flags);
return result;
}
};
int main()
{
Flags f;
f.SetFlagBit(1);
f.SetFlagBit(2);
f.SetFlagBit(3);
f.ClearFlagBit(3);
f.ToggleBit(1);
f.RestoreFlagBit(2);
}
Flags: 0x2
Flags: 0x6
Flags: 0xe
Flags: 0x6
Flags: 0x4
Flags: 0x0