C++负数、小数如何保存
負整數
正整數直接按照源碼存儲,負整數按照補碼存儲。
原碼、反碼、補碼
首先要清楚原碼、反碼、補碼:
計算機中一個字節為8位,在此以一個字節為例:
原碼:
十進制1:0000 0001
十進制-1:1000 0001(負數的符號位為1)
反碼:
十進制1:0000 00001
十進制-1:1111 1110(除符號位外,其余反轉)
補碼:
十進制1:0000 00001
十進制-1:1111 1111(負數的補碼為負數的反碼+1)
因此,正數的原碼、反碼、補碼相同,負數的原碼、反碼、補碼各不相同。
?
反碼、補碼作用
引入補碼,是為了計算負數的加法,也可以看做減法。比如10-1,如果按原碼計算的話:
(0000 1010 + 1000 0001) = 1000 1011 = -11,錯誤。
因此需要使用補碼進行計算:
(0000 1010 + 1111 1111) = 1 0000 1001 = 0000 1001 = 9。
引入反碼、補碼是為了更容易的計算減法。可以將減法看做加一個負數,然后取負數的補碼進行計算。
計算機以補碼的形式存儲小數。
?
范圍
對于單字節無符號整形,占8位,范圍為:0000 0000~1111 1111,即0~255。
對于單字節有符號整形,占8位,正數范圍為:0000 0001~0111 1111,即1~127,
??????????????負數范圍為:1000 0001~1111 1111,即-1~-127。
?
?
小數
參考:
https://blog.csdn.net/ACdreamers/article/details/19012279?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.control&dist_request_id=1328603.58325.16151918506269985&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.control
小數的整數、小數部分分別用二進制表示:
如6.75轉換為二進制:6轉換為0110,0.75轉換為:11。所以6.75可以表示為(0110.11)2
小數的存儲
小數的存儲分為3位:符號位、指數位、尾數位。
符號位:0:正數,1:負數
指數位:127+指數轉為二進制數
尾數為:小數轉為二進制數后,用科學計數法表示后的尾數
??如173.8125轉換為二進制:10101101.1101,用科學計數法表示為:1.01011011101*10^7。則符號位為0,指數位為:(127+7)2,即10000110,尾數位為:01011011101。則173.8125在計算機中存儲為:
0 1000 0110 0101 1011 1010
總結
以上是生活随笔為你收集整理的C++负数、小数如何保存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浪子野心的下一句是什么呢?
- 下一篇: ORB_SLAM2 PnPSolve