C++负数、小数如何保存
負(fù)整數(shù)
正整數(shù)直接按照源碼存儲,負(fù)整數(shù)按照補(bǔ)碼存儲。
原碼、反碼、補(bǔ)碼
首先要清楚原碼、反碼、補(bǔ)碼:
計(jì)算機(jī)中一個(gè)字節(jié)為8位,在此以一個(gè)字節(jié)為例:
原碼:
十進(jìn)制1:0000 0001
十進(jìn)制-1:1000 0001(負(fù)數(shù)的符號位為1)
反碼:
十進(jìn)制1:0000 00001
十進(jìn)制-1:1111 1110(除符號位外,其余反轉(zhuǎn))
補(bǔ)碼:
十進(jìn)制1:0000 00001
十進(jìn)制-1:1111 1111(負(fù)數(shù)的補(bǔ)碼為負(fù)數(shù)的反碼+1)
因此,正數(shù)的原碼、反碼、補(bǔ)碼相同,負(fù)數(shù)的原碼、反碼、補(bǔ)碼各不相同。
?
反碼、補(bǔ)碼作用
引入補(bǔ)碼,是為了計(jì)算負(fù)數(shù)的加法,也可以看做減法。比如10-1,如果按原碼計(jì)算的話:
(0000 1010 + 1000 0001) = 1000 1011 = -11,錯(cuò)誤。
因此需要使用補(bǔ)碼進(jìn)行計(jì)算:
(0000 1010 + 1111 1111) = 1 0000 1001 = 0000 1001 = 9。
引入反碼、補(bǔ)碼是為了更容易的計(jì)算減法。可以將減法看做加一個(gè)負(fù)數(shù),然后取負(fù)數(shù)的補(bǔ)碼進(jìn)行計(jì)算。
計(jì)算機(jī)以補(bǔ)碼的形式存儲小數(shù)。
?
范圍
對于單字節(jié)無符號整形,占8位,范圍為:0000 0000~1111 1111,即0~255。
對于單字節(jié)有符號整形,占8位,正數(shù)范圍為:0000 0001~0111 1111,即1~127,
??????????????負(fù)數(shù)范圍為:1000 0001~1111 1111,即-1~-127。
?
?
小數(shù)
參考:
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
小數(shù)的整數(shù)、小數(shù)部分分別用二進(jìn)制表示:
如6.75轉(zhuǎn)換為二進(jìn)制:6轉(zhuǎn)換為0110,0.75轉(zhuǎn)換為:11。所以6.75可以表示為(0110.11)2
小數(shù)的存儲
小數(shù)的存儲分為3位:符號位、指數(shù)位、尾數(shù)位。
符號位:0:正數(shù),1:負(fù)數(shù)
指數(shù)位:127+指數(shù)轉(zhuǎn)為二進(jìn)制數(shù)
尾數(shù)為:小數(shù)轉(zhuǎn)為二進(jìn)制數(shù)后,用科學(xué)計(jì)數(shù)法表示后的尾數(shù)
??如173.8125轉(zhuǎn)換為二進(jìn)制:10101101.1101,用科學(xué)計(jì)數(shù)法表示為:1.01011011101*10^7。則符號位為0,指數(shù)位為:(127+7)2,即10000110,尾數(shù)位為:01011011101。則173.8125在計(jì)算機(jī)中存儲為:
0 1000 0110 0101 1011 1010
總結(jié)
以上是生活随笔為你收集整理的C++负数、小数如何保存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浪子野心的下一句是什么呢?
- 下一篇: 喝酒歌词是哪首歌啊?