⑴ 為什麼負數要以補碼形式存儲
補碼的功能類似於:時針倒撥 3 小時,與正撥 9 小時,效果相同。
那麼,計算機中的負數,也可以改為正數(即補碼)。
同時,減法運算,也就可以用加法運算代替了。
於是,藉助於補碼,就統一了加減法,就能夠簡化計算機的硬體。
十進制比較容易理解:
25 - 1 = 24
25 + 99 = (一百) 24。
只要忽略進位,+99 就能代替-1。
+99 就稱為-1 的補數。
在這里用了 2 位 10 進制。
求補數的演算法:補數 = 負數 + 10^n。
n 是位數。
-----------------------
計算機用二進制,補數,就改名為:補碼。
一個位元組,是 8 位 2 進制。
計數范圍仿敬是:0000 0000 ~ 1111 1111(十進制 255)。
計數周期是:2^8 = 256。
求補碼的演算法:負數的補碼=負數+2^n。
那麼:
-1 的補碼=-1 + 256 = 255 = 1111 1111。
-2 的補碼=-2 + 256 = 254 = 1111 1110。
。。。
例如,7-2 = 5,用補碼計算如下:
7 =0000 0111
[-2] 補 =1111 1110
---相加------------
得:(1)0000 0101 = 5
舍棄進位,結果笑寬就完全正確。
藉助於補碼,計算機中,就不存在負數了,從而就把減法轉換為加法運算。
-------碰大亮----------------
補碼的來源,與原碼反碼毫無關系。
「取反加一、符號位也能參加運算」,這些,都沒有什麼理論依據。
通過原碼反碼,已經證明「符號位能參加運算」是錯誤的。
補碼,它就是一個正數,什麼符號位也沒有。
補碼的全部位,都是代表數據的,當然就都可以參加運算。
⑵ 計算機負數是怎麼編碼的
就比如-9補碼是11110111。
9的源碼為00001001,如果是負數的話,補碼為最高位置1,其餘取反也就是11110110,然後在最低位加1即可即11110111。
計算機中的負數是以其補碼形式存在的補碼=原碼取反+1。
一個位元組有8位可以表示的數值范圍在-128到+127。用二進製表示也就是10000000-01111111(注意:最高位表示符號)。最高位是1的都是負數最高位是0的都是正數。
(2)存儲負數的編碼技術是什麼擴展閱讀:
補碼乘法
補碼的乘法不具備【X*Y】補=【X】補×【Y】補的性質。但是【X*Y】補==【X】補×Y,所得結果再取補碼,如薯衫x=101,y=011,[x*y]補禪手卜=-[(-101)*011]=-[011*011]=-01001=10111。
其中,若【Y】補=y31y30……y0,則Y=-y31*2^31+y30*2^30+……+y0*2^0
原碼表示法在數值前面增加了一位符號位(即最高位為符號位):正數該位為賀穗0,負數該位為1(0有兩種表示:+0和-0),其餘位表示數值的大小。
⑶ c++中負數如何編碼
首先,我們看一下這個數軸,8位二進製表示數值型數據,它應該是落在0~256(不含 256)區間上,孝喚蠢當這個數落在0~128(不含128)區間上時,我們說它是一個正數,至於正多少取決於這個數從0點往右走了多少。 如:+33對應的二進制是00010001 如果這個數落在後半軸上,也就是128~256(不含256)區間上時,我們說它是一個負數,至於負多少取決於它離終點256還差多少。 如:156表示就不再是+156,而是表示-100,二進制編碼為:10011100 稍微細心的朋友可能會發現,凡是落在後半軸的數,也就是負數,都有一個共同點,那就是這個數第1位二進制編碼一定是1,而落在前半軸的數第1位一定是0,這樣就造成很多人誤認為1就是僅僅簡單的表示負號,而0表示正號,這是不科學的。但反過來說是可以的:負數的最高位一定是1,正數的最高位一定是0 可能有朋友會問了,156表示不是+156,那+156該怎麼表示呢,它的二進制編碼又是多少呢? 在這里我要強調一下,我們現在是假設只用1個位元組(也是8位二進制)來表示帶符號的整數,那麼它能表示的數的范圍只能是-128~+127之間,156是表示不巧陪下的,明白嗎。 好的,到這里相信各位基本了解了負數的表示原理了,在這里我還想溝通一下求負數表示的另外一種方法,這就是很多書上提到的採用補碼的方法 要求一個負數的二進製表示方式,可以先求出它的原碼,然後每位取反得出它的反碼,反碼再加1得鏈肢出補碼 如:假設還是以8位二進制來表示帶符號的整數 -56的原碼是:00111000 那麼它的反碼是:11000111 補碼為:11000111+1=11001000 得出,-56在計算機內部是用11001000這串二進制來表示的
vae.la
⑷ 負數在內存中的二進制形式怎樣存儲
負數在內存中是以補碼的形式儲存的,先寫出該負整數的原碼,然後將原碼除符號位以外的各位取反,得到反碼,再將反碼加一,得到補碼,即為該負數的二進制儲存形式
⑸ 二進制中的負數在計算機的儲存方式
二進制的儲存中都是用的補碼,正數的原碼、反碼和補碼相同,負數的原碼是最高位為1,反碼最高位不變,其餘各位取反,補碼為其反碼+1。比如說:-1的原碼是10000001(省略幾個零),反碼是11111110,補碼就是11111111。~_~我現在C語言學得很好的哦,問我就不會錯了。
⑹ 所有負數在計算機中存儲和運算時都使用什麼表示
用補碼表示。
在計算機中存儲一個數(正數或負數)的時候,都是以補碼的形式存儲的。而正數和負數的卜皮補碼表示方式是不一樣的。正數的補碼就等於它的原碼,譽碰而負數的補碼是原碼除符號位以外都取反,然後 + 1 得型虛差來的。
⑺ 負數的8421碼怎麼表示呢
8421碼是中國大陸的叫法,
即BCD代碼。Binary-Coded Decimal,簡稱BCD,稱BCD碼或二-十進制代碼,亦稱二進碼十進數。是一種二進制的數字編碼形式,用二進制編碼的十進制代碼。這種編碼形式利用了四個位元來儲存一個十進制的數碼,使二進制和十進制之間的轉換得以快捷的進行。這種編碼技巧,最常用於會計系統的設計里,因為會計制度經常需要對很長的數字串作準確的計算。相對於一般的浮點式記數法,採用BCD碼,既可保存數值的精確度,又可免卻使電腦作浮點運算時所耗費的時間。此行唯外,對於其他需要高精確度的計算,BCD編碼亦很常用。
由於十進制數共有0、1、2、……、9十個數碼,因此,至少需要4位二進制碼來表示檔漏培1位十進制數。4位二進制碼共有2^4=16種碼組,在這16種代碼中,可以任選10種來表示10個十進制數碼,共有N=16!/(16-10)!約等於2.9乘以10的10次方種方案。常用的BCD代碼列於末。
常用BCD編碼方式
最常用的BCD編搜塌碼,就是使用"0"至"9"這十個數值的二進碼來表示。這種編碼方式,在中國大陸稱之為「8421碼」。除此以外,對應不同需求,各人亦開發了不同的編碼方法,以適應不同的需求。這些編碼,大致可以分成有權碼和無權碼兩種:
有權BCD碼,如:8421(最常用)、2421、5421…
無權BCD碼,如:餘3碼、格雷碼…
以下為三種常見的BCD編碼的比較。
十進數 8421-BCD碼 餘3-BCD碼 2421-A碼
(M10) D C B A C3 C2 C1 C0 a3 a2 a1 a0
0 0 0 0 0 0 0 1 1 0 0 0 0
1 0 0 0 1 0 1 0 0 0 0 0 1
2 0 0 1 0 0 1 0 1 0 0 1 0
3 0 0 1 1 0 1 1 0 0 0 1 1
4 0 1 0 0 0 1 1 1 0 1 0 0
5 0 1 0 1 1 0 0 0 0 1 0 1
6 0 1 1 0 1 0 0 1 0 1 1 0
7 0 1 1 1 1 0 1 0 0 1 1 1
8 1 0 0 0 1 0 1 1 1 1 1 0
9 1 0 0 1 1 1 0 0 1 1 1 1
⑻ C語言中 負數在內存中為什麼要以補碼形式存儲
c的char數據屬於基本類型,基本類型其中還包括-整型,實型,枚舉類型!
數據在內存中是以二進制形式存放的。數值是以補碼表示的。
整型:
一個正數的補碼和其原碼的形式相弊搜同。而負數的補碼方式是將其絕對值的二進制形式「按位求反再加1」
實型:
在內存中佔4個位元組辯物,是按照指數形式存儲的,實型數據分為小數部分和指數部分,分別存放!計算機用二進製表示小數部分,用2的冪次來表示指數部分!
字元型:
在內存中字元的存儲實際上是把字元相對應的ASCII代碼放到存儲單元中的。而這些ASCII代碼值在計算機中也是以二進制形式存放的。這個與攜卜液整型的存儲很相似。因此這兩類之間的轉換也比較方便!
⑼ 計算機中的負數為什麼用補碼存儲
計算機中的負數是為了方便運算,所以計算機才會採用補碼存儲數據。補碼是計算機方便加法睜檔運算的編碼。例如100(10進制)100/16=6餘46/16=0餘6。所以100的16進制數是64H以8位二進制來說64H=01100100B正數的補碼和原碼相同。
所以100的補碼還是01100100。
另假設還有個數是-109109的16進制,是01101101-109的原碼,就是11101101(首位是符號位)-109的反碼,就是10010010(除了符號位其悉塵亂他各位分別取反)。109的補碼就是10010011(反碼加1)。現在運算100-109=100+(-109)。01100100+10010011=11110111這個結果就是-9的補碼。如果換成其他編碼運算就不會這么簡單了。
例如原碼相加的話存兄仿在符號位進位的問題等等。對於計算機而言。數值的計算補碼是最方便的。
⑽ 計算機內存中存放一個負數的編碼是什麼
2進制的
前面的是0的話就是正數
是1的話就是負數
例碼昌如把一迅宴個正數的整數換成2進畝模銀制的 ,然後0換成1, 1換成0.
位數+1 就行