欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中的取反操作符(~)

 更新時間:2023年03月25日 16:41:38   作者:王魚(Virgil)  
這篇文章主要介紹了python中的取反操作符(~),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

python取反操作符

~ : 按位取反運算符:對數(shù)據(jù)的每個二進制位取反,即把1變?yōu)?,把0變?yōu)? 。

~x 類似于 -x-1

1、計算依據(jù)

  • ①正數(shù)的原碼、反碼、補碼都是一樣的
  • ②負數(shù)的補碼為符號位不變,剩余位取反再加1
  • ③原碼求補碼: 取反,+1
  • ④補碼求原碼: 取反,+1
  • ⑤負數(shù)是以補碼存儲的
  • ⑥取反操作是在原碼上進行的
  • ⑦符號位,1表示負數(shù),0表示正數(shù)

2、例子

~(-2)

首先你要知道 -2 在計算機里面的二進制形式,由⑤和②可知:

  • -2 原碼:1000 0000 0000 0010
  • -2 反碼:1111 1111 1111 1101 #符號位不變,各位求反
  • -2 補碼:1111 1111 1111 1110 #補碼 = 反碼 + 1

1111 1111 1111 1110 就是-2在計算機里面的原型

現(xiàn)在開始對他求反,符號位不變,

按位取反: 0000 0000 0000 0001

很明顯是一個正數(shù),其原碼為其本身,所以輸出為1.

~2

2 原碼,反碼,補碼: 0000 0000 0000 0010

按位取反: 1111 1111 1111 1101

這是一個負數(shù)該怎么辦?能直接求嗎?

很顯然是不行的,⑥說了:取反操作計算結(jié)果是在原碼上進行的,⑤也說了:負數(shù)是以補碼存儲的

1111 1111 1111 1101 是 0000 0000 0000 0010 的反碼,但我們想要的是結(jié)果,而不是在計算機里面的原型,

恰好,④補碼求原碼: 取反,+1

  • 取反: 1000 0000 0000 0010
  • 加 1: 1000 0000 0000 0011

于是,我們得到了原碼,可以計算結(jié)果了

1000 0000 0000 0011 = -3

總之,取反很簡單,但是要注意,取反后是不是原碼,是否可以直接計算結(jié)果

python數(shù)值取反問題~

在python中,用取反符號~得到的并不是我們想象中的結(jié)果,總結(jié)一下規(guī)律,就是   (取反后的值)=  -(取反前的值)-1

下面來分析一下

例如對1取反,1的8位二進制表示為:0000 0001 ,  取反后的結(jié)果是:1111 1110, 對于計算機來說,二進制以1開頭表示的是負數(shù), 所以這個1111 1110到底表示的是什么負值呢,想要知道這個值,可以求它的補碼,即先取反碼 :0000 0001, 再加1:0000 0010,說明 1111 1110 的原碼為 0000 0010 也就是正數(shù) 2, 所以 1111 1110代表的就是負數(shù) -2 

下面再舉個例如

對 -2 取反, -2的二進制表示為 2的補碼,即 0000 0010 > 1111 1101 > 1111 1110 ,-2的二進制就表示為1111 1110, 對它取反得到 0000 0001,顯而易見,取反后的值為1 , 所以 ~(-2)= 1  ,  ~1=-2

總結(jié)出來就是:(取反后的值)=  -(取反前的值)-1

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論