2017-10-07 2 views
1

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?

+0

Ist es von einem Zufallsgenerator? – ayhan

+0

Das Maskieren einer Ganzzahl mit '0x7FFFFFFF' stellt sicher, dass eine 32-Bit-Menge nicht signiert werden kann (das höchstwertige Bit ist 0). – Neitsa

+2

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

Antwort

5

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 bTrue sind.
a & b ist 1, wenn sowohl a als auch b1 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 
1

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.