來自菜鳥教程
https://www.runoob.com/python/python-exercise-example55.html
題目:學(xué)習(xí)使用按位取反~。
說明:
二進制數(shù)在內(nèi)存中以補碼的形式存儲。
按位取反:二進制每一位取反绵患,0 變 1柴梆,1 變 0尚镰。
最高位為符號位须妻,正數(shù)的符號位為 0,負(fù)數(shù)為 1殴瘦。
對正數(shù)來說袭景,最高位為 0唁桩,其余各位代表數(shù)值本身(以二進制表示),如 +42 的補碼為 00101010耸棒。
對負(fù)數(shù)而言荒澡,把該數(shù)絕對值的補碼按位取反,然后對整個數(shù)加 1与殃,即得該數(shù)的補碼单山。如 -42 的補碼為 11010110(00101010 按位取反
11010101+1 即 11010110)。
~9 的計算步驟:
轉(zhuǎn)二進制:0 1001
計算補碼:0 1001
按位取反:1 0110
轉(zhuǎn)為原碼:
按位取反:1 1001
末位加 1:1 1010
符號位為 1 是負(fù)數(shù)幅疼,即 -10
實例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
a = 7
b = ~a
c = -7
d = ~c
print ('變量 a 取反結(jié)果為: %d' % b)
print ('變量 c 取反結(jié)果為: %d' % d)
以上實例中輸出結(jié)果為:
變量 a 取反結(jié)果為: -8
變量 c 取反結(jié)果為: 6
說明:
~7饥侵,對 7 進行取反,7 的補碼是 00000111 對補碼取反得到 11111000衣屏,最高位 1 為符號位,表示負(fù)數(shù)辩棒,所以該補碼對應(yīng)的整數(shù)為 -8狼忱。
~-7 對 -7 進行取反,-7 的補碼是 11111001 對補碼取反得到 00000110一睁,最高位 0 為符號位钻弄,表示正數(shù),所以補碼對應(yīng)的整數(shù)為 6者吁。