python中的取反操作符(~)
python取反操作符
~ : 按位取反運(yùn)算符:對(duì)數(shù)據(jù)的每個(gè)二進(jìn)制位取反,即把1變?yōu)?,把0變?yōu)? 。
~x 類似于 -x-1
1、計(jì)算依據(jù)
- ①正數(shù)的原碼、反碼、補(bǔ)碼都是一樣的
- ②負(fù)數(shù)的補(bǔ)碼為符號(hào)位不變,剩余位取反再加1
- ③原碼求補(bǔ)碼: 取反,+1
- ④補(bǔ)碼求原碼: 取反,+1
- ⑤負(fù)數(shù)是以補(bǔ)碼存儲(chǔ)的
- ⑥取反操作是在原碼上進(jìn)行的
- ⑦符號(hào)位,1表示負(fù)數(shù),0表示正數(shù)
2、例子
~(-2)
首先你要知道 -2 在計(jì)算機(jī)里面的二進(jìn)制形式,由⑤和②可知:
- -2 原碼:1000 0000 0000 0010
- -2 反碼:1111 1111 1111 1101 #符號(hào)位不變,各位求反
- -2 補(bǔ)碼:1111 1111 1111 1110 #補(bǔ)碼 = 反碼 + 1
1111 1111 1111 1110 就是-2在計(jì)算機(jī)里面的原型
現(xiàn)在開始對(duì)他求反,符號(hào)位不變,
按位取反: 0000 0000 0000 0001
很明顯是一個(gè)正數(shù),其原碼為其本身,所以輸出為1.
~2
2 原碼,反碼,補(bǔ)碼: 0000 0000 0000 0010
按位取反: 1111 1111 1111 1101
這是一個(gè)負(fù)數(shù)該怎么辦?能直接求嗎?
很顯然是不行的,⑥說了:取反操作計(jì)算結(jié)果是在原碼上進(jìn)行的,⑤也說了:負(fù)數(shù)是以補(bǔ)碼存儲(chǔ)的
1111 1111 1111 1101 是 0000 0000 0000 0010 的反碼,但我們想要的是結(jié)果,而不是在計(jì)算機(jī)里面的原型,
恰好,④補(bǔ)碼求原碼: 取反,+1
- 取反: 1000 0000 0000 0010
- 加 1: 1000 0000 0000 0011
于是,我們得到了原碼,可以計(jì)算結(jié)果了
1000 0000 0000 0011 = -3
總之,取反很簡單,但是要注意,取反后是不是原碼,是否可以直接計(jì)算結(jié)果
python數(shù)值取反問題~
在python中,用取反符號(hào)~得到的并不是我們想象中的結(jié)果,總結(jié)一下規(guī)律,就是 (取反后的值)= -(取反前的值)-1
下面來分析一下
例如對(duì)1取反,1的8位二進(jìn)制表示為:0000 0001 , 取反后的結(jié)果是:1111 1110, 對(duì)于計(jì)算機(jī)來說,二進(jìn)制以1開頭表示的是負(fù)數(shù), 所以這個(gè)1111 1110到底表示的是什么負(fù)值呢,想要知道這個(gè)值,可以求它的補(bǔ)碼,即先取反碼 :0000 0001, 再加1:0000 0010,說明 1111 1110 的原碼為 0000 0010 也就是正數(shù) 2, 所以 1111 1110代表的就是負(fù)數(shù) -2
下面再舉個(gè)例如
對(duì) -2 取反, -2的二進(jìn)制表示為 2的補(bǔ)碼,即 0000 0010 > 1111 1101 > 1111 1110 ,-2的二進(jìn)制就表示為1111 1110, 對(duì)它取反得到 0000 0001,顯而易見,取反后的值為1 , 所以 ~(-2)= 1 , ~1=-2
總結(jié)出來就是:(取反后的值)= -(取反前的值)-1
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python中使用zip函數(shù)出現(xiàn)<zip object at 0x02A9E418>錯(cuò)誤的原因
這篇文章主要介紹了python中使用zip函數(shù)出現(xiàn)<zip object at 0x02A9E418>錯(cuò)誤的原因分析及解決方法,需要的朋友可以參考下2018-09-09Python中多進(jìn)程處理的Process和Pool的用法詳解
在Python編程中,多進(jìn)程是一種強(qiáng)大的并行處理技術(shù),Python提供了兩種主要的多進(jìn)程處理方式:Process和Pool,本文將詳細(xì)介紹這兩種方式的使用,希望對(duì)大家有所幫助2024-02-02Keras: model實(shí)現(xiàn)固定部分layer,訓(xùn)練部分layer操作
這篇文章主要介紹了Keras: model實(shí)現(xiàn)固定部分layer,訓(xùn)練部分layer操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python基于httpx模塊實(shí)現(xiàn)發(fā)送請(qǐng)求
這篇文章主要介紹了Python基于httpx模塊實(shí)現(xiàn)發(fā)送請(qǐng)求,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07python中g(shù)etaddrinfo()基本用法實(shí)例分析
這篇文章主要介紹了python中g(shù)etaddrinfo()基本用法,實(shí)例分析了Python中使用getaddrinfo方法進(jìn)行IP地址解析的基本技巧,需要的朋友可以參考下2015-06-06python矩陣的轉(zhuǎn)置和逆轉(zhuǎn)實(shí)例
今天小編就為大家分享一篇python矩陣的轉(zhuǎn)置和逆轉(zhuǎn)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12Python獲取二維數(shù)組的行列數(shù)的2種方法
這篇文章主要介紹了Python獲取二維數(shù)組的行列數(shù)的2種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02python微信公眾號(hào)之關(guān)注公眾號(hào)自動(dòng)回復(fù)
這篇文章主要為大家詳細(xì)介紹了python微信公眾號(hào)之關(guān)注公眾號(hào)自動(dòng)回復(fù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10