Share via


_bittestandset, _bittestandset64

[Diese Dokumentation ist nur eine Vorschau und wird in späteren Versionen ggf. geändert. Blank topics are included as placeholders.]

Microsoft-spezifisch

Generieren Sie die bts-Anweisung, die die Adresse b Bit aüberprüft, seinen aktuellen Wert zurückgibt und das Bit auf 1 festgelegt wird.

unsigned char _bittestandset(
   long *a,
   long b
);
unsigned char _bittestandset64(
   __int64 *a,
   __int64 b
);

Parameter

  • [in, out] a
    Ein Zeiger auf den zu überprüfenden Arbeitsspeicher.

  • [in] b
    Die Bitposition zu testen.

Rückgabewert

Das Bit an der Position angegeben.

Anforderungen

Intrinsisch

Architektur

_bittestandset

x86, IPF, x64

_bittestandset64

IPF, x64

Headerdatei <intrin.h>

Hinweise

Auf der IPF-Architektur ist die bts-Anweisung nicht verfügbar, sodass diese systeminterne eine benutzerdefinierte Funktion, die das Verhalten von btsnachahmt. Diese benutzerdefinierte Funktion ist möglicherweise langsamer als eine handgeschriebene Inlinefunktion, da sie Mehraufwand beinhaltet das Behandeln des Falls, in dem es unnötig ist negativ b , das in bestimmten Fällen werden.

Diese Routine ist als systeminterne Funktion nur verfügbar.

Beispiel

// bittestandset.cpp
// processor: x86, IPF, 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);
}
          
        

Siehe auch

Referenz

Systeminterne Funktionen des Compilers