erste beiden bits eines unsigned long?



  • Hi,
    wie kann ich gucken, ob die ersten beiden bits (linke Seite) eines unsigned long gesetzt sind?

    Danke...



  • mit der entspr. zhal und verkn. und erg. anschauen



  • unsigned long l=0xFFFFFFFF;
    	if (l & (1<<(sizeof(long)*8-1)) | (1<<(sizeof(long)*8-2)) )
    		//gesetzt
    


  • edit:

    if ( ( l & (1<<sizeof(long)*8-1) ) && ( l & (1<<sizeof(long)*8-2) ) )
            //gesetzt
    


  • 😃 schrieb:

    Hi,
    wie kann ich gucken, ob die ersten beiden bits (linke Seite) eines unsigned long gesetzt sind?

    Aus 'linke Seite' folgere ich, dass Du die beiden hochwertigsten Bits meinst; also z.B. Bit 30 und Bit 31, falls ein unsigned long 4 Byte lang ist.
    Folgendes sollte funktionieren, auch wenn sizeof( unsigend long ) > sizeof( int ) ist.

    #include <iostream>
    
    int main()
    {
        using namespace std;
        const unsigned long HighBits2 = ( static_cast< unsigned long >( 3 ) << (8 * sizeof( unsigned long ) - 2) );
        for( unsigned long l; cout << "> ", cin >> l; )
        {
            cout << "Eingabe in Hex-Code: " << hex << l << dec << endl;
            if( (l & HighBits2) == HighBits2 ) // <-- hier ist die Abfrage
            {
                cout << "die beiden hochwertigsten Bits sind gesetzt." << endl;
            }
        }
        return 0;
    }
    

    Wenn Du dagegen definitiv Bit 30 | Bit 31 abfragen willst, unabhänig davon, wie lang ein unsigned long ist, so schreibe besser:

    const unsigned long HighBits2 = 0xC0000000;  // Bit 30 | Bit 31
    

    Gruß
    Werner



  • Ich würde es wie folgt probieren:

    unsigned long x = /*...*/;
    bool result = (x & (3lu << sizeof(unsigned long) * CHAR_BIT - 2)) == (3lu << sizeof(unsigned long) * CHAR_BIT - 2);
    

Anmelden zum Antworten