Python 中取反操作符是如何算出來的,為什麼正數的這麼怪異,負數的正常?

時間 2021-06-09 22:53:02

1樓:

你那個負數取反之後每個位都會取反只是巧合罷了,不信你可以用別的數試試。

Python的思路是這樣的:

1、bin型別包含兩部分,第一部分是正反,第二部分是數字大小。也就是說你的bin(-2)=-0b10,先判斷是負號,然後判斷2的大小用二進位制表示為0b10,所以就表示為-0b10。

2、然後是取反,因為人們規定了乙個數按位取反加一後就是這個數的負數,也就是~a + 1 = -a,那算下來~a = -a - 1唄。

Python根據上面說的思路,套用~a = -a - 1這個公式,2按位取反就等於-2 - 1,最終就是-3。然後按照Python的bin型別思路,先判斷符號再判斷大小,符號是負號,大小是3,於是就等於-0b11了唄。同理,-2按位取反等於1,判斷符號為正,大小為1,所以是0b01。

但這個0b01看上去是全部按位取反這只是個巧合。如果你拿-3來看的話,bin型別為-0b11;按位取反等於2,bin型別為0b10。你看,是不是也不是你想象的那種按位取反呢。

2樓:

2 的二進位制表示 0000 0010

取反之後 1111 1101 最高位是1 表示是個負數.負數在計算機中儲存的是補碼

補碼 = 原碼的反碼加一

所以原碼是 0000 0011 這個二進位制是3所以2取反就是-3, -0b11

嗯應該是這樣子...

C delete操作符是如何知道目標指標型別的?

李魔劍 型別是取不到的 如果要長度和行號什麼的按下面的寫法就可以了話說長度有必要去分析malloc那個頭麼,直接鉤了取傳入的引數不就得了.void operator new size t size,const char file,int line define new new FILE LINE 咕...

C 在對int型別使用中的字尾操作符如 3 0f 時沒有型別轉換嗎等是如何實現的?

573xmcgcg C 標準 2.13.4 Floating literals 第1條 A floating literal consists of an integer part,a decimal point,a fraction part,an e or E,an optionally sig...

python中def中def是如何實現的?

琉年 deff n def g passifn print g print in f else returngf 1 f 1 f 1 a f 0 print a a a f 0 print a a a f 0 print a a b f 0 print b b b f 0 print b b b f...