01數(shù)值表示:
在計算機系統(tǒng)中,要表示一個數(shù),原則上我們可以使用任意進制來描述,但在實際應用中一般用二進制、八進制、十進制、十六進制來表示一個數(shù)。
二進制表示一個數(shù)只能用0、1兩個數(shù)字來表示,比如10011(十進制是19);
八進制表示一個數(shù)只能用0~7八個數(shù)字來表示,比如017(十進制是15). 八進制通常以0開頭,用來區(qū)分十進制;
十進制表示一個數(shù)只能用0~9十個數(shù)字來表示,這是平時經(jīng)常用的,比如100
十六進制表示一個數(shù)只能用09,AF這16個數(shù)字來表示,其中A~F換成10進制就是10-15,十六進制通常以0x開頭,用來區(qū)分十進制。比如0x1f(十進制是31)
通過上面的介紹,我們也可以看出,N進制表示一個數(shù),可以用0~N之間的N個數(shù)字來表示,N進制表示的數(shù),轉換成十進制的方法如下:
數(shù)字的值*N((數(shù)字所在位置-1)次方)
比如六進制表示一個數(shù)125,那么如何算這個數(shù)的十進制表示的值呢?換算方法如下:
1(6的2次方)+2*(6的一次方)+5*(6的0次方) = 53
02
進制轉換
上面介紹了一個數(shù)值如何用進制來表示,對同一個數(shù)值而言,可以用多種進制來表示,進制之間可以相互轉換。在實際應用中,N進制換算成M進制,我們一般會先從N進制換算到十進制,再從十進制換算到M進制。下面我們通過一些例子來說明進制之間如何轉換。
01
十進制轉二進制
把該十進制數(shù),用二因式分解,取余。
以235為例,轉為二進制
235除以2得117,余1
117除以2得58,余1
58除以2得29,余0
29除以2得14,余1
14除以2得7,余0
7除以2得3,余1
3除以2得1,余1
從得到的1開始寫起,余數(shù)倒排,加在它后面,就可得11101011。
02
**十進制轉八進制
**
把該十進制數(shù),用8因式分解,取余。
以100為例,轉為八進制
100除以8得12,余4
12除以8得1,余4
1除以8得0,余1
轉成八進制就是0144
03
**二進制轉十進制
**
二進制轉為十進制要從右到左用二進制的每個數(shù)去乘以2的相應次方。
以二進制數(shù)10101為例
- 1 (2的4次方)+1* (2的2次方) + 1*(2的0次方) = 21**
03
小數(shù)的表示方法
一個數(shù)會包含整數(shù)部分和小數(shù)部分,上面章節(jié)已經(jīng)講述了整數(shù)部分如何表示,本小結介紹一下小數(shù)部分是如何表示的。
- 實數(shù)A可以用二進制表示為(An (2* N) + An-1 (2 (N-1))+…+A2 * 2(* 2) + A1 (2* 1) + A0+ A-1(2* (-1) )+ A-2(2**(-2)) +……).**
從上面可以看到,小數(shù)部分就是2的負冪次方多項式構成,因此小數(shù)的數(shù)值用二進制表示就是從高到底依次為A-1A-2A-3A-4….
用多項式描述一個數(shù),可以看到存在一個問題就是小數(shù)部分存在無法精確表示的問題,比如0.6 這個小數(shù)數(shù)值,如果用二進制的話,2的負冪次方多項式只能無限接近,但無法等于0.6。
十進制的小數(shù)數(shù)值用二進制來表示方法:
將該數(shù)字乘以2,取出整數(shù)部分作為二進制表示的第1位;然后再將小數(shù)部分乘以2,將得到的整數(shù)部分作為二進制表示的第2位;以此類推,知道小數(shù)部分為0。舉例如下:
十進制0.4轉成二進制:
0.4 * 2 = 0.8 整數(shù)部分是0
0.8 * 2 = 1.6 整數(shù)部分是1
0.6 * 2 = 1.2 整數(shù)部分是1
0.2 * 2 = 0.4 整數(shù)部分是 0
可以看到進入循環(huán)了,因此0.4的二進制表示為0110 0110 0110 …..
二進制小數(shù)轉成十進制方法:
按位乘以權重,然后相加。二進制小數(shù)點后第1位乘以2^(-1),第2位乘以2^(-2)
以此類推,然后相加即可
**例如:0.101——>12^(-1)+02^(-2)+1*2^(-3)=0.5+0+0.125=0.625**
十進制小數(shù)數(shù)值轉成其他進制也是類似的,所有的原理都是一個實數(shù)可以用一個多項式來表示,正數(shù)次冪部分代表的是整數(shù)部分,負數(shù)次冪部分代表的是小數(shù)部分。
04
有符號數(shù)和無符號數(shù)
從底層硬件來講,存儲的都是0/1這樣的狀態(tài),本是是沒有有符號和無符號之分的。但計算機應用時,根據(jù)描述現(xiàn)實世界的需求,可以在軟件中指定這個變量是有符號變量還是無符號變量,從而這個變量的數(shù)值是有符號數(shù)值還是無符號數(shù)值。因此這兩個定義其實是計算機應用的范疇。
有符號和無符號數(shù),簡單的區(qū)別就是,無符號數(shù)所有的位都是用來表示一個數(shù),有符號數(shù)最高位用來表示符號位,其他位用來表示實際的數(shù)值。對于某一個具體的數(shù)值,不管是有符號表示還是無符號表示,它的二進制表示都是一樣的。
在8位機的系統(tǒng)中,地址和數(shù)據(jù)總線是8bit的,無符號變量表示的值的范圍是0255,有符號變量表示的值的范圍是-128127
另外還有一點,如果一個數(shù)值聲明為有符號數(shù),那么最高位是bit位,這是按照二進制表示這個數(shù)值之后的最高位,其實在計算系統(tǒng)里面,比如有8位機,16位機,32位機,64位機,一個數(shù)的最大位寬也就上面對應的bit數(shù), 如果某個數(shù)標識為有符號數(shù),那么對應第7bit, 15bit,31bit,63bit就是符號位。
05
原碼反碼補碼
這三個概念其實都是對有符號數(shù)來講的,無符號數(shù)不存在上面這些概念。
這些概念都是為了在計算機系統(tǒng)中描述一個負數(shù)而創(chuàng)建的,通過這些概念擴展二進制數(shù)字系統(tǒng),從而可以表示有符號數(shù)。
正數(shù)的原碼、反碼、補碼都是一樣的。
負數(shù)的原碼就是符號位為1,其余位表示真值,舉例如下(8位機):
-2的原碼就是1000_0010(高位符號位為1,其余位是2)
負數(shù)的反碼其實是在原碼的基礎上, 符號位不變,其余各個位取反,舉例如下(8位機):
-2的反碼就是1111_1101(在-2的原碼上,符號位不變,其他位取反)
負數(shù)的補碼是反碼+1,舉例如下(8位機):
-2的補碼就是1111_1110(在-2的反碼上加1)
所以我們這里講這三個概念,有一個大前提就是,要明確好當前這個系統(tǒng)是多少bit的系統(tǒng),這樣才能確定符號位是哪bit。
-
二進制
+關注
關注
2文章
807瀏覽量
42331 -
計算機
+關注
關注
19文章
7663瀏覽量
90807 -
數(shù)值
+關注
關注
0文章
80瀏覽量
14582
發(fā)布評論請先 登錄
評論