c語言中的位運算子中 按位取反 是怎麼運算的

2021-03-10 16:06:14 字數 2887 閱讀 3699

1樓:非常可愛

使用~按位取反運算的時候,計算機會將運算元所對應的二進位制表示式的每一版

個位進行取反權計算,取反後所得到的值就是~按位取反的運算結果。

例如,假如計算機是32位的,接下來要計算~5的值,計算過程如下:

5 的二進位制表示式為:0000 0000 0000 0000 0000 0000 0000 0101

執行~運算,即~5後: 1111 1111 1111 1111 1111 1111 1111 1010,即結果為-6

以上過程沒有任何問題,但如果忘記了負數的二進位制表達方式,那麼就會對這個結果產生疑問,為什麼1111 1111 1111 1111 1111 1111 1111 1010表示-6,可能會以為它應該表示-10等等,所以,使用~按位取反的另一個關鍵就是理解1111 1111 1111 1111 1111 1111 1111 1010為什麼表示-6,也即理解負數的二進位制表達方式。

擴充套件資料

js取整

~是按位取反運算,~~是取反兩次

在這裡~~的作用是去掉小數部分

因為位運算的操作值要求是整數,其結果也是整數,所以經過位運算的都會自動變成整數

除了~~n 還可以用

n<<0

n>>0n|0

2樓:程式設計師的每一天

c語言經典例子之按位取反運算子

3樓:匿名使用者

位運算中的按位取

抄反操作,使襲用的運算子為~, 其計算原則為:

按照運算元的二進位制值,逐位計算,如果原始值為0,則結果該位上為1, 否則結果該位上為0。

比如char型別的0x78按位取反

~0x78

=~b0111 1000//轉為二進位制值。

=b1000 0111//按位取反。

=0x87

4樓:匿名使用者

~1010的反碼bai是0101

而負數在計

du算機中的表zhi示是用補碼dao,-11求補碼過程:1011取反->0100加1->0101

即專-11等價於~10

括號中的屬是0101

補充說明:是這樣的,1010在32位計算機中的儲存實際上是00001010,取反後是11110101,在計算機中首位是0表示正數,是1表示負數,即11110101表示的是一個負數,即要由11110101求這個負數,即求補碼的逆,步驟:先減1得11110100,再取反,取反時符號位不變,得10001011,即-11。

用4位表示的話可以填0101,或者是8位的11110101

5樓:匿名使用者

計算機儲存的數不是隻有4位的

像32位計算機,儲存int型別的數就用32位所以上面10的二進位制碼專1010,前面還有好屬多0,取反的時候要一起取反

簡單的話,以8位二進位制碼為例

括號中就是11110101,也就是00001010取反的結果這是補碼

-10的補碼是10的補碼(正數的補碼就是原碼)取反加1既然這裡只取反沒加1,所以就是-10-1=-11數轉補碼

正數就是二進位制碼

負數是相反數(即取絕對值)的二進位制碼取反加1補碼轉數

正數(二進位制最高位為0)直接轉

負數(二進位制最高位為1)減1取反轉成十進位制進位制數再加個負號

c語言中的位運算子中『按位取反』是怎麼運算的,什麼是負數的反碼,請各位幫我解釋一下!!!

6樓:匿名使用者

0001

取反1110

符號位為1,取反+1為

1010

轉化成10進製為

-2正數的原碼,補碼,反碼都相同,都等於它本身負數的補碼是:符號位為1,其餘各位求反,末位加1反碼是:符號位為1,其餘各位求反,但末位不加1也就是說,反碼末位加上1就是補碼

1100110011 原

1011001100 反 除符號位,按位取反1011001101 補 除符號位,按位取反再加1正數的原反補是一樣的

在計算機中,資料是以補碼的形式儲存的:

在n位的機器數中,最高位為符號位,該位為零表示為正,為1表示為負;

其餘n-1位為數值位,各位的值可為0或1。

當真值為正時:原碼、反碼、補碼數值位完全相同;

當真值為負時:

原碼的數值位保持原樣,

反碼的數值位是原碼數值位的各位取反,

補碼則是反碼的最低位加一。

注意符號位不變。

如:若機器數是16位:

十進位制數 17 的原碼、反碼與補碼均為: 0000000000010001

十進位制數-17 的原碼、反碼與補碼分別為:1000000000010001、1111111111101110、1111111111101111

7樓:匿名使用者

按位取反運算子~為單目運算子,具有右結合性。

其功能是對參與運算的數的各二進位按位求反。例如~9的運算為: ~(0000000000001001)結果為:1111111111110110

就像樓上說的「簡單的說: 1變成0 0變成1 」

8樓:匿名使用者

按位取反就是所有位取反。

寫出來就是:

a = ~a;

9樓:匿名使用者

簡單的說: 1變成0 0變成1

問幾個關於左移運算子,右移運演算法,按位與,或,異或,按位取反運算問題

10樓:聽不清啊

1,2:這是因為~x=-x-1

3:^是異或運算,兩個數的二進位制列豎式,相同的異或得0,不同的得1。

4:《是左移運算子,-1的補碼是全1,左移2位後就是111...1100,這補碼就表示為-4。

c語言中逗號運算子怎麼用,C語言中逗號運算子怎麼用

一 用法 1 當順序點用,結合順序是從左至右,用來順序求值,完畢之後整個表示式的值是最後一個表示式的值。main 先算括號內的值 s 2 4,d 4 7 括號內應為 4,7 括號內取值只取最後一個,如果沒有括號則取第一個 a 12 7 19。x y 3,z y 2 5 是首先把y賦值為3,把y遞增為...

請教C語言,請教一下C語言中按位取反 的使用

在你原來程式的基礎上做了些改動,如下 include int main void int i,j,k,j1,k1 for i 6 i 100 i i 2 for j 2 j i 2 j 判斷i是由兩個素陣列成,尋找素數j for j1 2 j1 j j1 判斷j是不是素數 if j j1 0 j j...

c語言按位左移運算規則C語言按位左移運算規則

c語言中按位左移的運算子為 其規則如下 對於操作a 1 按照二進位制值每位向高位 書寫上是向左 移動n位 2 最高位 最左邊的 n位捨去 3 最低位 最右邊 填加n個0.簡單起見,用char型舉例如下 例一0x12 3 b00010010 3 b10010 000 這裡最高位的三個0被捨去,其它依次...