2017-11-09 3 views
1

die nächste ist Teil eines Programms, das ich mache, ich muss eine "UND" Operation zwischen 2 Hexadezimalzahlen, im ersten Teil alles ist in Ordnung, aber in der zweite Teil, wenn ich zu einem Hex-Nummer verwenden lange ist das Ergebnis anders als erwartet:Ergebnis nicht erwartet in Hex logisch "und" mit Python

#this is ok 
x = hex(268435456)  
transition = int(x, 16) & 0x000000FF 
>>>> print transition 
>>>> 6 

#this does not work 
y = hex(268435456) 
transition = int(y,16) & 0xFFFFFF00 
>>>> print transition 
>>>> 268435456 
#in this case the result should be 10 00 00 00 

wissen Sie, was geschieht?

+1

'#in diesem Fall sollte das Ergebnis 10 00 00 00 sein' warum denkst du das? Und warum konvertierst du Zahlen in hexadezimale Strings und dann zurück in int? Sie sind bereits Ints. – pvg

+0

Ich kann das erste Ergebnis nicht reproduzieren (ich bekomme 0). Das zweite Ergebnis sieht korrekt aus. –

Antwort

1

Das Ergebnis ist 0x10000000 hex, die 268435456 dezimal ist. Siehe hex(268435456).

Sie müssen Ihre Dezimalzahlen nicht in Zeichenfolgen konvertieren und sie wieder in Ints zurückversetzen. Just do:

x = 268435456 
y = x 
transition_x = x & 0xFF 
transition_y = y & 0xFFFFFF00 
print transition_x # 0 
print transition_y # 268435456 

Ihr erstes Ergebnis ist falsch. Das Ergebnis ist 0, nicht 6.

Wenn Sie eine ganze Zahl mit Dezimalschreibweise definieren (1234), hexadezimale Notation (0x4d2) oder Oktalschreibweise (0o2322 oder 02322 [py2]), wird es immer als intern int gespeichert werden. Die Nummernliterale, die ich verwendet habe, repräsentieren den gleichen Dezimalwert von 1234. Beim Drucken der Nummer wird immer die Dezimalschreibweise verwendet, es sei denn, Sie konvertieren sie explizit in eine bestimmte Zeichenfolgendarstellung.

+0

Wahr, ich habe nicht bemerkt, dass ich die Ausgabe in HEX konvertieren muss, um die 0x10000000 zu erhalten. Vielen Dank – Oscoke

1

Ihr Ergebnis ist10 00 00 00, Sie haben nur die Dezimaldarstellung anstelle der hexadezimalen Darstellung gedruckt.

>>> print '{:x}'.format(268435456) 
10000000 
+0

Das Ergebnis ist nicht. Es ist, wenn Sie es in Hex konvertieren. – pvg

+0

Das ist die hexadezimale Darstellung (was der Abstand alle 2 Stellen impliziert). Es ist die * gleiche * Ganzzahl, nur 2 verschiedene Möglichkeiten dargestellt – wim

Verwandte Themen