C語言中為什麼用補碼錶示負數,而不是直接在正數的前面加1呢

2025-04-16 02:25:23 字數 4884 閱讀 5681

1樓:做而論道

為什麼用補碼錶示負數?

原理:用加法運算,也可以產生減法的效果。

目的:簡化計算機的硬體。在兩位數之內,+99,就可以代替-1。

如: 24 - 1 = 23

只取兩位,這兩種演算法好滑,功能就是相同的。

加上 99,就相當於,減一!

物極必反,聽說過吧?

99,就是-1 的補數。鐘錶豎襪和的分針,正撥 59,也相當於倒撥 1 分鐘!

計算機用二進位,就改稱為:補碼。八位二進位:0000 0000~1111 1111(十進位255)。

255(=1111 1111),就是-1 的補碼。

254(=1111 1110),就是-2 的補碼。

負數的補碼 =餘盯 2^n + 該負數。(n 是二進位的位數。)

藉助於補碼,在計算機中,只需配置乙個加法器,即可。

正數,沒有補碼,直接參加計算即可。

2樓:香慈栗清俊

因為乙個位元組是八位的。我們總是利用最高位表示符號位,正數的補碼是本身。

舉個例子,若正數0111,1111

按照你的意思,直接加1

不就變成10111,1111了嘛。

還有,補碼錶示負數是因為計算機中的加減運算,對負數都是通過補碼來運算的盯叢慶,通過補碼的加減,得到的鄭備補碼再反過來求出對應的負數,計算機中的計算只有0和1

不可能在數字前加凱握正負號,所以負數必須用補碼。

為什麼c語言負數是以補碼形式存放的?

3樓:做而論道

計算機的硬體,只有加法器。

負數、減法,都必須用加法來完成。

你看十進位:

24 + 99 = (一百) 23

捨棄進位,+99 可以當做-1 進行運算。

99 就是-1 的補數。

補數(補碼),就是乙個「代替負數進行運算的正數」。

對於 2 位 10 進位數,求補數的公式:

補數=負數+10^2。計算機中,用二進位,就稱為補碼。

對於 8 位 2 進位數,求補碼的公式:

補碼=負數+2^8。1 的補碼是:-1 + 256 = 255 = 1111 1111。

2 的補碼是:-2 + 256 = 254 = 1111 1110。

128 的補碼是:128 = 1000 0000。

求補碼,不要用「原碼取反加一」。那個方法,是無法求出-128 的補碼的。

而且,你也不能理解補碼的意義。為什麼 c 語言負數是以補碼形式存放的?

藉助於補碼,就統一了加減法,硬體就得以簡化。

4樓:居芷藍邱作

以-1和+1相加為例子。

乙個位元組,如果是負數,它是255,如果是正數,它是。

因為加到256後並不會真的進位,而是把op置位。所以整負數相加的問題很多地方都可以不去理會了。不用真正去區分正負了,只要依據最後需要的型別去處理結果就可以。

正數和負數為什麼都用補碼錶示呢?

5樓:做而論道

在計算機系統中,負數,以其正值的補碼形式表示。

這就是說:只有負數,才用補碼錶示。

補碼,其實是乙個「代表負並毀數」的正數。

使用了補碼,計算機中就沒有負數了,絕碼備而且,減法運算,也沒有了。

那麼,計算機只需配置乙個加法器,就可走遍天下了。

正數(即補碼),怎麼能代替負數呢?

你看十進位,兩位數:0~99,週期是 10^2 = 100。

此時可有:

24 + 99 = 一百) 23

只要你捨棄進位,只保留兩位,+99 就和-1 是等效的。

加法,也就代替了減法運算。

計模弊算公式: 代替負數的正數 = 負數 + 週期。

計算機用二進位,也具有這個規律。

乙個位元組,是 8 位 2 進位數,計數週期是 2^8 = 256。

代入上述公式,就能求出補碼。

零和正數,必須直接參加運算,不可做任何轉換。

也有人說,正數本身,就是補碼,呵呵

6樓:網友

因為計尺桐算方便。

用-1+1 的悉孝 8bit 位來舉例,如果不用補碼,-1 就是 10000001;1就是 00000001,做運算的時候就很複雜,需要做很多的處理。

用了補碼之後,-1變成了 11111111,1還是10000001,計算陵陸坦的時候就是按照二進位來計算就好了。

如何將負數變成補碼錶示的正數?

7樓:澤播仁德人家

你就直接進行【數 制 轉 換】即可。

但是,要注意:首位是負數。已鬥臘知補碼是首位 1,既代表負號,也代表-128。

數值位之和:64 + 16 + 4 + 1 = 85。

加在一起,就是真值:-43。---謹氏。

另乙個補碼是首位 0,就是代表 0。

數值位之和:64 + 16 + 4 + 1 = 85。

加在一起,就是真值:0 + 85 = 85。

-空晌滑。由補碼求真值,十分簡便。

並不用琢磨「原碼反碼取反加一符號位不變」。

老外算術不靈,才需要弄哪些騷操作。

c語言 -50的補碼是如何求出來的,求過程,我算出來的不一樣,負整數賦給無符號整數是如何賦的。

8樓:做而論道

c語言 -50 的補碼是如何求出來的,求過程,我算出來的不一樣。

負整數賦給無符號整數是如何賦的。

在計算機系統中,數值,一律採用補碼錶示和儲存。

換算公式: 負數的補碼 = 負數 + 2^n。

當 n = 16,-50 的補碼就是:

i = 50; /存入-50 的補碼,即 65486

printf("%d". i); 按照「帶符號數」輸出:-50。

printf("%u". i); 按照「無符號數」輸出:65486。

在宣告變數 i 時,可以是「帶符號(int 型)」,也可以是「無符號」。

c 語言系統,對不同型別的變數進行計算時,會有不同處理方法。

例如: i = i / 2; /i 除以 2

如果 i 是「無符號數」,運算的的結果,就是: i = 32743。

如果 i 是「帶符號數」(int 型),就得到-25 的補碼:65511。

你可以用「%d 和 %u」觀察運算結果,進行驗證。

9樓:商歌戮吞

i = 50; /1111 1111 1100 1110,-50 的補碼。

j = 50; /1111 1111 1100 1110=65486,無符號數。

//變數型別不同。 賦值,可以相同。

i = i / 2; /1111 1111 1100 111,-25 的補碼。

// i 是帶符號變數,按照補碼來操作,結果,仍然是負數。

j = j / 2; /1111 1111 1100 111=32743,無符號數。

// j 是無符號變數,按照無符號數來操作,結果,是無符號數。

賦值時,都可以用「帶符號數」來賦值,以補碼,存入不同型別的變數。

除以 2 時,就分別按照不同型別,進行操作了。

這很正常,沒毛病。

c語言中,負數的補碼怎麼取的?以-127為例!

10樓:

將所有位取反,再在最後一位+1

比如16位二進位補碼-127

首先得到127這個數。

然後所有位取反。

再在末位+1,得到-127的補碼為。

如果將這個數化成10進位,可以這樣:

先看最高位,是1,就寫上負號(是0就不用寫,直接化成10進位就行,後面的就不需要做了),得到乙個光禿禿的負號。

然後將所有位取反得。

再在末位加1,得。

將這個數化成10進位,是127,然後寫在第一步的負號後面,得出這個補碼對應的10進位數是-127

C語言中ascii碼錶有什麼用,C語言中ASCII碼值是什麼意思

計算機中,所有的資料在儲存和運算時都要使用二進位制數表示 因為計算機用高電平和低電平分別表示1和0 例如,象a b c d這樣的52個字母 包括大寫 以及0 1等數字還有一些常用的符號 例如 等 在計算機中儲存時也要使用二進位制數來表示,而具體用哪些二進位制數字表示哪個符號,當然每個人都可以約定自己...

面積為什麼用S表示,周長為什麼用C表示

c就是英文字母circumference 周長 的縮寫,s就是英文字母square 面積 的縮寫 謝謝,望採納,祝學習愉快 面積為什麼用s表示,周長為什麼用c表示 c是circumference的縮寫 du s是英bai文square的縮寫。面積可以 zhi是平面的也可以是曲 dao面的。平方米,平...

面積為什麼用S表示,周長為什麼用C表示

c是circumference的縮寫 du s是英bai文square的縮寫。面積可以 zhi是平面的也可以是曲 dao面的。平方米,平內方分米,平方釐米,是容公認的面積單位,用字母可以表示為 m dm cm 環繞有限面積的區域邊緣的長度積分,叫做周長,也就是圖形一週的長度。s即單詞square的縮...