Ich habe folgenden WertWas bedeutet "& 0x7fffffff" bedeutet in "int (time.time() * 1000,0) & 0x7FFFFFFF"
start = int(time.time()*1000.0) & 0x7FFFFFFF
Was ist der Zweck der & 0x7FFFFFFF
?
Ich habe folgenden WertWas bedeutet "& 0x7fffffff" bedeutet in "int (time.time() * 1000,0) & 0x7FFFFFFF"
start = int(time.time()*1000.0) & 0x7FFFFFFF
Was ist der Zweck der & 0x7FFFFFFF
?
Es ist eine Bitmaske. Bei der Low-Level-Berechnung ist dies eine effiziente Möglichkeit, Registerbits zu löschen. In diesem Fall enthält die Maske alle Bits eines ganzzahligen 32-Bit-Satzes außer dem vorzeichenbehafteten Bit. Das vorzeichenbehaftete Bit ist das Bit, das bestimmt, ob die Nummer positiv oder negativ ist. ANDing (&
) mit dieser Maske setzt das vorzeichenbehaftete Bit effektiv auf 0, was bedeutet, dass die Zahl immer positiv ist.
a && b
ist True
, wenn beide a
und b
True
sind.
a & b
ist 1
, wenn sowohl a
als auch b
1
sind, für jede Binärziffer in a und b.
Python unterstützt binäre Literale mit dem Präfix 0b
. Hier sind einige 3-Bit-Nummern, die zusammen and
sind.
>>> 0b101 & 0b110 == 0b100
True
>>> 0b011 & 0b111 == 0b011
True
>>> 0b011 & 0b110 == 0b010
True
0x7FFFFFFF
ist eine hexadezimale Zahl (2.147.483.647 im Dezimalformat), die den maximalen positiven Wert für eine 32-Bit-Binärzahl mit Vorzeichen darstellt. Das &
Symbol ist ein bitwise operator, genauer der and
Operator. Geben Sie den Wert 0x7FFFFFFF
'A' und den Ausdruck int(time.time()*1000.0)
'B' ein.
Wenn Sie 'A' & 'B'
tun, jedes Bit des Ausgangs ist 1, wenn das entsprechende Bit von A und B 1 ist, ansonsten ist es 0.
Ist es von einem Zufallsgenerator? – ayhan
Das Maskieren einer Ganzzahl mit '0x7FFFFFFF' stellt sicher, dass eine 32-Bit-Menge nicht signiert werden kann (das höchstwertige Bit ist 0). – Neitsa
Es bedeutet, dass Sie nur die letzten 31 Bits des resultierenden Werts beibehalten möchten, also ist es wie in Modulo 2^31 zu berechnen. – trincot