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 31Gruß
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);