開心生活站

位置:首頁 > 綜合知識 > 

按位取反運算符怎麼用,c語言中的位運算符中‘按位取反’是怎麼運算的

1.c語言中的位運算符中‘按位取反’是怎麼運算的

使用~按位取反運算的時候,計算機會將操作數所對應的二進制表達式的每一個位進行取反計算,取反後所得到的值就是~按位取反的運算結果。

按位取反運算符怎麼用 c語言中的位運算符中‘按位取反’是怎麼運算的

例如,假如計算機是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>>0

n|0

2.按位取反 運算符

首先看等號左邊 (100) 的二進制表示爲: 0110 0100 按位取反的意思就是每一位取反,0變1,1變0 所以: ~100 的二進制表示爲:1001 1011 所以等號左邊=1001 1011 再看右邊 -101. 一旦看到出現負數,那麼這個數一定是按有符號數的規則來表示的。

一個二進制數 按位取反並加一以後就可以得到它自己的負數的補碼,也就是說: ~x+1=-x 所以,我們把101按位取反加一 先取反: ~101=10011010 再加一: ~101+1=10011011=-101 所以等號右邊=10011011=左邊,所以等號成立。 P.S:補充一句,計算機內存裏的邏輯存儲位是非常複雜的,我這裏即使講得再清楚也無法保證你完全明白。

一般來說,彙編語言的書的開頭部分會詳細講解這部分知識以服務於彙編語言,請參閱之。

3.按位取反運算符

~077o=11000000b是沒有錯的,但在計算機中,整數是使用補碼來表示的。正數的補碼與原碼相同,而負數的補碼則是最高位爲1表示負數,其餘低位是將該負數的絕對值取反加1來表示的。

例如-64d,如果用8位二進制補碼錶示的話,最高位爲1表示負數,其餘7位則將-64d的絕對值64d=1000000b,取反加1得1000000,與符號位(最高位)1拼接就是11000000,所以11000000表示-64d。(後綴o表示八進制數,d表示十進制數,b表示二進制數)。

4.c語言中的位運算符中‘按位取反’是怎麼運算的,什麼是負數的反碼

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

5.c語言中的按位取反及其他的爲運算符有什麼實際作用

按位與(&)也是雙目運算符。。同“與門”基本一致。。只是涉及位運算。

可參考下面這個例子。

多個對象的話,假設 a & b & c,只有當 abc 都爲真的時候,輸出纔是真。

其實 a & b & c = (a & b) & c,可以把 a & b 的結果當作一個輸入,然後再與 c 運算。

多個對象其實也一樣。。大同小異。

6.C語言中的位運算符是怎麼取反的

a爲int類型 通常佔4個字節

2的原碼:0000 0000 0000 0000 0000 0000 0000 0010

取反: 1111 1111 1111 1111 1111 1111 1111 1101

最高位是1所以是負數,求其原始數據,方法是

再次取反加1(符號位不變)

取反: 1000 0000 0000 0000 0000 0000 0000 0010

加1 1000 0000 0000 0000 0000 0000 0000 0011

所以是 -3