2010-10-28 4 views
0
bitwise

je me suis coincé avec le code Python suivantsigné arithmétique en Python

>>> a = 0xff 
>>> b = 1 << 8 
>>> ~a & ~b 
-512 

Pourquoi est-il -512? Dans la notation binaire, il devrait ressembler à ceci:

 a 0 1111 1111 -> 255 
    b 01 0000 0000 -> 256 

    ~a 1 0000 0000 -> -256 
    ~b 10 1111 1111 -> -257 

    ~a&~b 00 0000 0000 -> 0 

Je me attendais à 0 comme avec int signé en C:

signed int a = 0xff; 
signed int b = 1 << 8; 
signed int k = ~a & ~b; 

Toute aide?

Répondre

4

En supposant des nombres entiers de 16 bits pour des raisons pratiques (le principe ne change pas pour 32 ou 64 bits):

a = 0xff = 0000 0000 1111 1111 
~a = -256 = 1111 1111 0000 0000 

b = 1<<8 = 0000 0001 0000 0000 
~b = -257 = 1111 1110 1111 1111 

-256 = 1111 1111 0000 0000 
-257 = 1111 1110 1111 1111 
-------------------------- & 
-512 = 1111 1110 0000 0000 
+0

merci, je suis gêné maintenant – matcheek