在計算機中根據(jù)小數(shù)點位置是否固定,數(shù)字分為定點數(shù)和浮點數(shù)兩種類型,整數(shù)屬于定點數(shù),它的小數(shù)點始終固定在最右邊。浮點數(shù),根據(jù)精度可以分為單精度浮點和雙精度浮點數(shù)兩種。
一、整數(shù)
整數(shù)分為無符號整數(shù)和有符號整數(shù)兩種
1、無符號整數(shù)
無符號整數(shù)按其二進制的形式直接存儲
2、有符號整數(shù)
有符號整數(shù)是在無符號整數(shù)的基礎上在最左邊加上符號位構成的
- 符號位:對于有符號整數(shù),它的最高位稱為符號位,0代表整數(shù),1代表負數(shù)。
- 原碼:符號位+無符號整數(shù)的二進制數(shù)據(jù) = 原碼,也就是說原碼由符號位和無符號整數(shù)的二進制數(shù)據(jù)兩部分組成。
然而在計算機中,為了加快運算速度,有符號整數(shù)并不是以原碼的形式而存在的,在存儲和讀取時都需要進行轉(zhuǎn)化。
- 反碼:
正數(shù)的反碼等于原碼
負數(shù)的反碼是在其原碼的基礎上,符號位不變,其余位置取反,即0變1,1變0 - 補碼:
正數(shù)和負數(shù)的補碼也不一樣,也要區(qū)別對待。
對于正數(shù),它的補碼就是其原碼(原碼、反碼、補碼都相同);負數(shù)的補碼是其反碼加 1。例如short a = 6;,a 的原碼、反碼、補碼都是0000 0000 0000 0110;更改 a 的值a = -18;,此時 a 的補碼是1111 1111 1110 1110。
可以認為,補碼是在反碼的基礎上打了一個補丁,進行了一下修正,所以叫“補碼”。
原碼、反碼、補碼的概念只對負數(shù)有實際意義,對于正數(shù),它們都一樣,有了這幾步轉(zhuǎn)化,計算機減法統(tǒng)一為加法,并帶符號直接運算,大大簡化了硬件電路,不需要再區(qū)分正負符號,以及將加減統(tǒng)一為加。
二、浮點數(shù)
浮點數(shù)在計算機中以科學記數(shù)法的方式存在的,根據(jù)精度不同可分為32位的單精度浮點數(shù),和64位的雙精度浮點數(shù)。

1、單精度浮點數(shù):
單精度浮點數(shù),共32bit占4個字節(jié)內(nèi)存,由符號位、指數(shù)位、尾數(shù)三部分組成,下面結合8.5(100.1 |)具體說一下
- 符號位:
同整數(shù)的符號位相同,0正1負,占一個bit,對于8.5的符號位為0 - 指數(shù):
指數(shù)部分占8bit,其值需要在原值的基礎上加上,由此指數(shù)部分的最大值為127
轉(zhuǎn)換位二進制為1111111
對于8.5的指數(shù)位==1111111+10=10000001
- 尾數(shù):
尾數(shù)同科學記數(shù)法
對于8.5的尾數(shù)為001 00000 00000 00000 00000
由此可依得出,單精度浮點數(shù)對應的
對于8.5這個例子
簡化一下得
去掉指數(shù)得
同理亦可計算出單精度浮點數(shù)的極值,
2、雙精度浮點數(shù)
雙精度浮點數(shù),轉(zhuǎn)化原理同單精度沒有區(qū)別只是位數(shù),最大最小值的變化。
三、js中的Number
對于js,所有的number都是雙精度浮點數(shù)。
對于浮點數(shù)的運算,存在精度丟失問題,因此js中也會如此,造成的原因就是小數(shù)部分轉(zhuǎn)化為二進制,例如0.3,一只*2取整數(shù),是取不盡的,故而知能取約數(shù),因此產(chǎn)生惡劣精度丟失。