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