Ich habe den im ELF-Hashing-Algorithmus verwendeten Tilde-Operator gesehen und bin gespannt, was er bewirkt. (Der Code stammt von Eternally Confused .)
unsigned elf_hash ( void *key, int len )
{
unsigned char *p = key;
unsigned h = 0, g;
int i;
for ( i = 0; i < len; i++ ) {
h = ( h << 4 ) + p[i];
g = h & 0xf0000000L;
if ( g != 0 )
h ^= g >> 24;
h &= ~g;
}
return h;
}
~
wird auch als "Ein-Komplement" bezeichnet, eine Form der binären Negation. Praktisch alle modernen Computer verwenden die Zweierkomplementarithmetik, die bitweise inverse plus eins. Bei einer vorzeichenbehafteten Ganzzahlvariablenx
finden Sie normalerweise~x + 1
den gleichen Wert wie-x
. Zum Beispielprintf("%hx %hx\n", -1234, ~1234 + 1)
drucktfb2e fb2e
auf meinem Gerät.~
ist der bitweise NICHT-Operator. Es invertiert die Bits des Operanden.Zum Beispiel, wenn Sie haben:
quelle
Dies ist der bitweise NICHT-Operator. Es werden alle Bits in einer Zahl umgedreht: 100110 -> 011001
quelle
Das Tilde-Zeichen wird als Operator verwendet, um alle Bits einer Ganzzahl zu invertieren (bitweise NICHT).
Zum Beispiel :
~0x0044 = 0xFFBB
.quelle
Es ist der bitweise NICHT-Operator. Es invertiert alle Bits in einem ganzzahligen Wert.
quelle
Der Tilde-Operator (~), auch bitweiser NOT-Operator genannt, führt das Komplement einer beliebigen Binärzahl als Argument aus. Wenn der Operand auf NOT eine Dezimalzahl ist, konvertiert er ihn als binär und führt die eigene Komplementoperation aus.
Um das eigene Komplement zu berechnen, invertieren Sie einfach alle Ziffern [0 -> 1] und [1 -> 0]. Beispiel: 0101 = 5; ~ (0101) = 1010. Verwendung des Tilde-Operators: 1. Wird beim Maskierungsvorgang verwendet. Maskierung bedeutet das Einstellen und Zurücksetzen der Werte in einem beliebigen Register. zum Beispiel:
Die Maske wird auf einen Binärwert von 10000 gesetzt, und diese Maske kann verwendet werden, um den in einer anderen Variablen vorhandenen Bitwert zu überprüfen.
Dies wird als Maskierung von Bits bezeichnet. 2.Um das binäre Äquivalent einer beliebigen Zahl mithilfe der Maskierungseigenschaften zu ermitteln.
Ausgabe: Dezimal 10 entspricht 00001010
Meine Beobachtung : Für den maximalen Bereich eines Datentyps liefert das eigene Komplement den um 1 verringerten negativen Wert auf einen entsprechenden Wert. Beispiel:
~ 1 --------> -2
~ 2 ---------> -3
und so weiter ... Ich werde Ihnen diese Beobachtung mit einem kleinen Code-Snippet zeigen
Hinweis: Dies gilt nur für den Bereich des Datentyps. Mittel für den Datentyp int Diese Regel gilt nur für den Wert des Bereichs [-2.147.483.648 bis 2.147.483.647].
Danke ..... Möge das dir helfen
quelle