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的縮...