C語言12按位取反的結果是什麼,c語言按位取反 ,看不明白輸出的結果!!!

2022-06-30 15:50:16 字數 5733 閱讀 1088

1樓:匿名使用者

1全部12預設是int型別,所以一般預設是00000000 00000000 00000000 00001100

所以按位取反之後就是11111111 11111111 11111111 11110011,這是一個負數的補碼儲存形式,第一位(也就是最左邊)的1是符號位,所以後面的1111111 11111111 11111111 11110011是一個補碼,由補碼求原碼你應該會吧。所有位取反後加一就是原負數的絕對值,所以12按位取反後就是-13.

2樓:

12這個數值常量在c語言裡會被認為是一個int,所以它應該以二進位制表現為00000000 00000000 00000000 00001100

然後對這個取反才是~12,也就是11111111 11111111 11111111 11110011

當然這個方法也太煩了,你記著一個正數取反的結果就是-1-正數絕對值就行了

3樓:馬堯由

取反是對二進位制來說的,要先轉化成二進位制,取反0變1,1變0,當然還要考慮正負的問題。如果是十進位制12,12對應二進位制1100,取反,就是0011,也就是3。

4樓:

12的二進位制數是:1100

取反後是:0011,對應的十進位制數是:3

你算的沒錯。

5樓:

先轉換成二進位制,12的二進位制應該是1100然後按位去反,得0011

這個是3,在不考慮第一位是不是表示正負的時候呃,你這個12是十進位制麼?

6樓:彭珂的課堂

c語言_084_取反運算

7樓:匿名使用者

按位取反是對二進位制來說的。所以取反之前需要先轉成二進位制。

c語言~12 按位取反的結果 是什麼?

8樓:匿名使用者

詳細給你解釋下:

12的二進位制如下: 00001100

取反後: 11110011 這是一個負數的補碼形式,但這是哪個負數的補碼呢?

我們先看看負數的補碼如何表示的。【負數的補碼是對其原碼逐位取反,但符號位除外;然後整個數加1。】

我們返回去弄:

先把11110011-1=11110010

然後符號位以外取反:10001101

看看除符號外的數:0001101 是13 所以這個數是-13

所以:~12=-13

這是百科上的相關知識點:

【求-7的補碼。 】

因為給定數是負數,則符號位為「1」。

後七位:-7的原碼(10000111)→按位取反(11111000)(負數符號位不變)→加1(11111001)

所以-7的補碼是11111001。

已知一個數的補碼,求原碼的操作分兩種情況:

(1)如果補碼的符號位為「0」,表示是一個正數,其原碼就是補碼。

(2)如果補碼的符號位為「1」,表示是一個負數,那麼求給定的這個補碼的補碼就是要求的原碼。

再舉一個例子:求-64的補碼

+64:01000000

11000000

c語言按位取反~,看不明白輸出的結果!!!

9樓:

兩個結果都是a的反碼肯定是一樣的啊。

4的二進位制表示是(int為4位元組)

00000000 00000000 00000000 00000100

其反碼就是(每一位取反)

11111111 11111111 11111111 11111011

而這正好是表示-5(int型別是按補碼錶示的)至於為什麼-5是那樣表示,就需要自己去學習下原碼,反碼,補碼的知識看看這個回答

10樓:匿名使用者

第一次將a取反賦值給b,a的值並沒有改變,

11樓:黑光一閃

當然是一樣的啊……

~又不會改變運算元。

12樓:匿名使用者

呵呵~樓主還真有種不達目的不罷休的勁啊~

學習就要有這種精神~

這個問題,我在你「關於c語言的問題」裡回答過了。樓主去看看吧!

13樓:斯璧完顏姿

是遞迴,除10以後是這個數去掉最低位後的一個新的數,比如108,首先她輸出8,然後把108/10=10,把這個數傳給函式,然後輸出0,然後再除以10=1,再把1傳給函式。。。

c語言按位取反?

14樓:小黑哎啊

~10的計算步驟:

轉二進位制:0 1010

計算補碼:0 1010

按位取反:1 0101

轉為原碼:1 0101

按位取反:1 1010 反碼

末位加一:1 1011 補碼

符號位為1是負數,即-11

規律:~x=-(x+1);

因此,t=~10(1010)==-11;

15樓:匿名使用者

10(10進位制)=0000000000000000000000001010(2進位制)。10的2進製表示取反後是:1111111111111111111111110101,這個是補碼,它的原碼是這樣算的:

先減1,再取反(符號位不變)。

減1後是11111111111111111111111111110100,

取反後是10000000000000000000000000001011,它表示10進位制的-11。

所以,輸出:-11。

c語言 按位取反

16樓:匿名使用者

2的二進位制: 0000 0010

-2的二進位制:1111 1110

~-2: 0000 0001

負數的二進位制表示方法:第一位符號位,然後取無符號部分取反後加1,得出負數的二進位制表示。

17樓:匿名使用者

公式:補碼 = 反碼 + 1

-2 在計算機中的補碼形式為:0xfffffffe按位取反成為:0x000000001

--------------------------------------

2 十六進位制為: 0x00000002

反碼為:0xfffffffd

反碼+1 = 0xffffffe(這就是-2)

18樓:聖鸞

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

19樓:匿名使用者

涉及到補碼反碼

2的原碼是00000010

那麼-2 的原碼為10000010取反得反碼11111101,末尾加1得補碼11111110

取反後就為00000001,不就是1嗎

不對,正數的原碼補碼和原碼相同,負數才按上面的方法來求

20樓:三號床鋪的四哥

按位取反運算子(~)

按位取反運算是單目運算,用來求一個位串資訊按位的反,即哪些為0的位,結果是1,而哪些為1的位,結果是0。例如, ~7的結果為0xfff8。

取反運算常用來生成與系統實現無關的常數。如要將變數x最低6位置成0,其餘位不變,可用**x = x & ~077實現。以上**與整數x用2個位元組還是用4個位元組實現無關。

當兩個長度不同的資料進行位運算時(例如long型資料與int型資料),將兩個運算分量的右端對齊進行位運算。如果短的數為正數,高位用0補滿;如果短的數為負數,高位用1補滿。如果短的為無符號整數,則高位總是用0補滿。

位運算用來對位串資訊進行運算,得到位串資訊結果。如以下**能取下整型變數k的位串資訊的最右邊為1的資訊位:((k-1)^k) & k。

移位運算

c語言按位取反~是什麼意思 10

21樓:匿名使用者

舉個例子,例如有0100 0001(a的scii碼),去翻為1011 1110。

將資料對應的每一位做非運算0->1;1->0

c語言按位取反~

22樓:am蘑菇

-5 首先我們現在的機器是32位的(樓主可以不必要理會)

所以4的二進位制為

0000 0000 0000 0000 0000 0000 0000 0100

而它的取反是

1111 1111 1111 1111 1111 1111 1111 1011

可以發現最高位是1,所以是負數(因為是int型,如果是unsigned就不能說是負數)。

但是,還要通過補碼的形式進行輸出(譚浩強第二章有說)

補碼是:按位取反再加1

所以也就是把1111 1111 1111 1111 1111 1111 1111 1011再取反

成0000 0000 0000 0000 0000 0000 0000 0100

然後再加1

就成0000 0000 0000 0000 0000 0000 0000 0101

所以得到答案為-5

23樓:丹昆雄

對於16位機子,4的2進製表示如下

00000000 00000100

取反後為

11111111 11111011

即-5驗證如下

#include

int main()

輸出結果為

-5請按任意鍵繼續. . .

關於c語言按位取反的運算

24樓:火虎

兩者都為1為1,否則為0。

1&1=1,1&0=0,0&1=0,0&0=0或運算:|

兩者都為0為0,否則為1

1|1=1,1|0=1,0|1=1,0|0=0非運算:~

1取0,0取1

~1=0,~0=1

~(10001)=01110

異或運算

兩者相等為0,不等為1

1^1=0,1^0=1,0^1=1,0^0=0

25樓:兔子和小強

十六進位制轉化為2進位制不用這麼做,

將每位十六進位制變成4位二進位制即可,所以

11(16) = 0001 0001(2)~0x11 這個0x11是整型常量

所以 = ~0x 0011

= 0xffee

26樓:匿名使用者

0x11=0x0011= 0000 0000 0001 0001(不用轉成十進位制再轉二進位制,太麻煩,一個16進位制的位直接轉成四位二進位制的位就可以了)

再取反就得到1111 1111 1110 1110即0xffee

問題的關鍵是要把位補齊了,前面的0不能省了呀

c語言結果是什麼為什麼mainintx

輸出為 10109 1main 10 10 9 1,x 是先取x的值再減,x則相反 for迴圈括號最後一句 y i 是在迴圈體執行後再自加。main i 0 x 10 y 11輸出x 10 y 11 i之後i 1,x進過printf d d x y 中間 之後x 9,i 1 x 9 y 12輸出x ...

c語言輸出結果是19為什麼

printf d n strlen p 是什麼dd?應該是printf d n s 吧?for i 0 i 4 i s aa i 1 對每行第2個數字求和,所以是19。aa 4 4 是一個4 x 4的矩陣i m1 m2 n 3 n 2 n 5 5 5 25 你可以把 define看成文字替換,就是在...

C語言讀程式執行結果是什麼,並請寫出原因謝謝

1.執行結果 wlo 分析如下 由main i 0 執行fun i printf c st i 輸出w 又 i 2 則i 2 執行func2 i 輸出 l 接著 i 2 i 4 執行 func1 i 輸出 o 最後輸出 wlo 2.執行結果 22 main函式執行f a j 0 則i 0 執行s b...