本文寫作時長3小時
計算機中,定點數(shù)的表示法有三種:原碼被饿,反碼四康,補碼。99%的計算機使用補碼表示狭握。
由于無符號定點數(shù)的原碼闪金,反碼,補碼都是一樣的论颅,所以也所謂什么原反補了哎垦。
原碼
有符號數(shù)的原碼表示
最高位為符號位,其余位數(shù)表示數(shù)值
符號位占據(jù)位7(第8位)恃疯,剩余7位表示值
正數(shù)部分
最大為0111 1111
漏设,十進制為127
0000 0000
到0111 1111
,+0
到+127
今妄,共128
個數(shù)
負數(shù)部分
最小為1111 1111
郑口,十進制為-127
1111 1111
到1000 0000
,-127
到-0
盾鳞,共128
個數(shù)
0
的表示法
1000 0000
犬性,十進制為-0
0000 0000
,十進制為+0
0的表示法用原碼有兩種形式腾仅,這是不行的
關(guān)于運算
試試用原碼進行1+(-1)
運算
0000 0001
1000 0001
1000 0002
結(jié)果等于-2
乒裆,wrong
假定+0
和-0
是兩個數(shù)
8位有符號數(shù)的原碼可以表示256個數(shù)
然而+0
和-0
是沒有意義的,認為是一個數(shù)的話推励,就是255
個數(shù)
無符號數(shù)的原碼表示
由于沒有符號位缸兔,所以8位都是數(shù)值位
最小0000 0000
,十進制為0
最大1111 1111
吹艇,十進制為255
范圍是0
~255
惰蜜,共256
個數(shù)
反碼
反碼規(guī)定:正數(shù)部分的反碼與原碼相同,負數(shù)部分的反碼除去符號位各位取反
有符號數(shù)的反碼表示
負數(shù)部分
原碼表示
1111 1111
到1000 0000
所以反碼(去除符號位受神,各位取反)為
1000 0000
到1111 1111
正數(shù)部分
原碼表示
0000 0000
到0111 1111
反碼(和原碼相同)為
0000 0000
到0111 1111
范圍是1000 0000
~0111 1111
抛猖,-127
~127
也是256個數(shù)
關(guān)于0的表示
反碼的0也有兩種
1111 1111
和 0000 0000
看來反碼也不行啊 (○′?д?)? <table>
關(guān)于運算
看看1+(-1)
的問題解決了嗎
0000 0001
1111 1110
1111 1111
等于0,運算問題解決了鼻听,但是0的表示法的問題依舊沒有解決
無符號數(shù)的反碼表示
與原碼相同
補碼
補碼規(guī)定:正數(shù)部分的補碼與原碼相同财著,負數(shù)部分的補碼為除去符號位反碼+1
有符號數(shù)的補碼表示
負數(shù)部分
原碼
1111 1111
到1000 0000
反碼(去除符號位,各位取反)
1000 0000
到1111 1111
補碼 (反碼+1)
1000 0001
到1000 0000
(溢出)
正數(shù)部分
原碼表示
0000 0000
到0111 1111
反碼(和原碼相同)為
0000 0000
到0111 1111
補碼(和原碼相同)
0000 0000
到0111 1111
關(guān)于0的表示
按照這個規(guī)則其實0的表示還是兩種
1000 0000
和 0000 0000
只不過撑碴,1000 0000
規(guī)定為-128
所以0的表示就唯一了
負數(shù)部分:1000 0000
撑教、1000 0001
到1111 1111
就是 -128
,-127
到-1
醉拓,所以就是-128
到-1
正數(shù)部分:0000 0000
到0111 1111
就是0
到127
整體就是-128-127
伟姐,嗯收苏,可以
關(guān)于運算
1+(-1)
0000 0001
1111 1111
0000 0000(溢出)
剛好是0000 0000
至此,運算問題解決愤兵,0的表示問題解決鹿霸。那就補碼了。
為什么要有原碼秆乳,反碼懦鼠,補碼?
有很多原因屹堰,只單單從本文角度簡單地來說
原碼:解決數(shù)值的符號問題
反碼:解決相同數(shù)值正負相加不等于0的問題
補碼:解決0的表示不唯一的問題
參考鏈接:
https://www.zhihu.com/question/20159860/answer/71256667
注意:
** 補碼的推導(dǎo)過程(本文肛冶,以及絕大多數(shù)教材)并不完全正確。如果單單從上述觀點去理解補碼扯键,是理解不了補碼的睦袖,上述觀點只是從結(jié)果的某一方面來說,簡單粗暴的進行補碼推導(dǎo)忧陪。**
假如從原理來講,先看這個近范,以后再做補充
https://www.zhihu.com/question/28685048/answer/41735701
理解有限嘶摊,歡迎指正!