2016-03-29 24 views
-1

Ben ~20b01 veya 0b101 olması gerektiğini düşündüm python3: ~ 2 = -0b11?

>>> print(2, bin(2), ~2, bin(~2)) 
> 2 0b10 -3 -0b11 

python3

aşağıdaki çalıştırın.

Neden -0b11?

cevap

2
2 = 00000010 
~2 = 11111101 

İkili tamamlayıcıda 11111101 değeri nedir? MSB


11111101 > 00000010 > 00000011 
     ^  ^
     Flip  Add 1 
göre işareti belirleyin

  • Döndürme'yi tüm bitleri
  • sonucu
  • 1 ekleme:

    Bunu cevaplamak için, bu basit algoritmayı izleyin

    En önemli bitin "1" olduğunu unutmayın. işareti negatif.

1

İlk raporuna bakın ~ 2:

2 = 0b0000...10 (n leading 0s) 
~2 = 0b1111...01 (n leading 1s) 

Ardından analiz -0b11

ikiye tümleme notasyonu kullanılarak çoğu bilgisayar sayısı gösterimi:

:

A - B = A + ~B + 1 

Yani -0b11 acturally olduğunu

- 0b11 
= 0 - 0b11 
= 0b0000...00 + 0b1111...00 + 1 
= 0b1111...01 
+0

'0x111 ... 01' hakkında,' 0b111 ... 01' demek istiyor musunuz? – Xin

+0

@Xin güzel yakalama –