C語言2的取反為什麼是 3,怎麼算的?正數的原碼反碼不是不變嗎

時間 2022-03-08 16:15:22

1樓:

誰說的正數的反碼不變。通常來說,是正數沒得反碼和補碼這一說,因為正數的編碼都是原碼,也就不存在正數的反碼。將正數取反得到的結果是完全的另一個數。

數字編碼方式無論哪種編碼,都是為了代表一個數並且便於運算。我甚至可以指定00000001來代表數學上的2,00000010來代表5。我可以任意做影射關係,就像ascii碼一樣,你說憑什麼13就代表換行,10代表回車,我用5代表回車就不行?

答案是當然行,如果你夠牛,能改變標準就行。說白了就是一個影射而已,我想怎麼影射都可以,只是前人已經制定了那樣的標準,我們學習的時候,要試圖去理解,前人為什麼呀要那樣制定標準,好處是什麼。

2樓:匿名使用者

計算機內不是用原碼錶示的,它是用「補碼」表示的

正數的反碼=原碼=補碼,不等於按位取反。c語言內部的取反也不是「反碼」。反碼的定義是針對負數的,負數反碼錶示:

1,符號位為1,2。除了符號位之外按位取反等於它的相反數。可見它和c語言的取反也不一樣

3樓:我是老弋

取反不是說變成反碼。

數字在計算機裡是以補碼的形式儲存,2在計算機裡是00000010,取反就是11111101,它也是個補碼,符號位是1,所以是負數,相應的反碼是11111100,原數是10000011,就是-3了。

所以2取反就是-3了。

4樓:匿名使用者

假設2以一個位元組儲存,則其補碼為:00000010(正數的原碼和補碼是一樣的),則取反後得到11111101這麼一個補碼,將這個補碼轉換成原碼得到的結果就是-3了。轉換過程如下:

11111101--將該數減1求反碼得 11111100--除符號位外每位取反求原碼得10000011,最高位表示符號位

c語言中「~」按位取反~2的值為何是-3

5樓:匿名使用者

按位取反就是0換成1,1換成0.

2的2進位制是0000....0010,取反後就是1111....1101,就是-3.

(ffff是-1,fffe是-2,fffd是-3)

6樓:匿名使用者

2是二進位制的2 假設8位 00000010 表示2 取反後變成:11111101,這在二進位制中就是-3

c語言2的取反為什麼是-3,怎麼算的?正數的原碼反碼不是不變嗎?

7樓:神之戰戟

取反是一種運算,而你說的原碼反碼補碼是數字的表示方法,是兩個不同的概念,十進位制的2用二進位制表示原碼是0000 0010 補碼0000 0010,而對十進位制的2取反就是1111 1101 得到的補碼是1000 0011,也就是十進位制的-3,看明白了嗎???

8樓:匿名使用者

取反還要再加1

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

(2)負數的補碼

符號位為1,其餘位為該數絕對值的原碼按位取反;然後整個數加1。

9樓:匿名使用者

反嗎就是按 -1 減去原數算出來的。

10樓:禽雅容苑揚

取反不是說變成反碼。

數字在計算機裡是以補碼的形式儲存,2在計算機裡是00000010,取反就是11111101,它也是個補碼,符號位是1,所以是負數,相應的反碼是11111100,原數是10000011,就是-3了。

所以2取反就是-3了。

c語言 按位取反

11樓:匿名使用者

2的二進位制: 0000 0010

-2的二進位制:1111 1110

~-2: 0000 0001

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

12樓:匿名使用者

公式:補碼 = 反碼 + 1

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

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

2 十六進位制為: 0x00000002

反碼為:0xfffffffd

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

13樓:聖鸞

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

14樓:匿名使用者

涉及到補碼反碼

2的原碼是00000010

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

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

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

15樓:三號床鋪的四哥

按位取反運算子(~)

按位取反運算是單目運算,用來求一個位串資訊按位的反,即哪些為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語言,我想知道為什麼正數的補碼,原碼,反碼都是相同的,這是規定麼,或者是如何求的,謝謝

16樓:拐角處

原碼就是二進位制定點表示法,即最高位為符號位,「0」表示正,「1」表示負,其餘位表示數值的大小。

反碼錶示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。

補碼錶示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。+7]原= 0 0000111 b

[-7]原= 1 0000111 b[+7]反= 0 0000111 b

[-7]反= 1 1111000 b

17樓:匿名使用者

隨便找本彙編的書,一般在第一章。

18樓:西知

我覺得應該是一種規定的演算法吧,拿最高位來判斷這個數是正數和負數。

如 if(最高位=0)else

19樓:劍影越林

原碼是數字轉換的二進位制數

補碼是數字對應的正數的二進位制數,也就是計算機儲存時候用的二進位制數反碼就是原碼按位求反再+1

所以正數的原碼 補碼 反碼 都相同

C語言的問題,為什麼是,C語言的問題,為什麼是

十進位制的7在ascii碼值表中對應的是bel bell 響鈴符 所以將其作為字元輸出時,進行了響鈴處理 給你一個ascii碼值表 bin dec hex 縮寫 字元 解釋 0000 0000 0 00 nul null 空字元 0000 0001 1 01 soh start of handing...

這道C語言的答案為什麼是這樣,看一道C語言程式答案,為什麼會這樣?

1 能整除形參x且不是偶數的各整數 是說求 各整數 這個 各整數 滿足兩個特徵 能整除形參x 不是偶數 這兩個特徵寫成 就是 x i 0 i 2 2 這些除數的個數通過形參n返回 是通過形參返回,而不是返回值返回。如果用return就 是函式的返回值。形參是n,兩條語句 n 0 和 n 即為將形參n...

簡單c語言求解為什麼VC中輸出結果是3和10啊

未王艮 x 是先用x 1參加運算後加1 所以b1 1 1 1 y是先加1再參加運算 額。這麼算好像不等於十 難道是編譯器的問題?好吧 這東西跟編譯器有關 3,10 3,12 說明這樣寫很危險 這是由於兩個軟體的原因,在vc 6.0裡的輸出結果應該是6和10。在vc也就是turbo c裡,把x 1作為...