程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java編程那些事兒7——進制的概念

Java編程那些事兒7——進制的概念

編輯:關於JAVA

1.2進制的概念

因為不可能為每個數值都創造一個符號,所以需要用基本數字組合出復合的數值,這樣就有了進制的概念。

其實所有進制都是人為的創造,都是用來計數方便的。現在最常用的進制是十進制,當然其它的進制也在使用中。例如“半斤八兩”這個成語,就反映了古代一斤等於十六兩的概念,也就是十六進制計數方式。

計算機編程中常用的進制有二進制、八進制、十進制和十六進制,十進制還是最主要的表達形式。在編程中,大家書寫的數值默認為十進制。

對於進制,有兩個最基本的概念:基數和運算規則。

l基數

基數指一種進制中組成的基本數字,也就是不能再拆分的數字。例如十進制是0-9,二進制是0和1,八進制是0-7,十六進制是0-9,A-F(大小寫均可)。或者可以簡單的這樣記憶,假設是n進制的話,基數就是[0,n-1]的數字,基數的個數和進制值相同,十進制有十個基數,依次類推。

l運算規則

運算規則就是進位或借位規則,這個類似於一般計算機書籍中位權的概念,例如對於十進制來說,該規則是“滿十進一,借一當十”,也就是低位的數字滿十了向高位進一,從高位借到的一,相當於低位上的十。其它的進制也是這樣,對於二進制來說,就是“滿二進一,借一當二”,八進制和十六進制也是這樣。

在數學上表示一個數字是幾進制,通常使用如下格式:[數值]進制數,例如[10]2 表示二進制數值10。

1.2.1 二進制

二進制是計算機內部數據表示的形式,所以學習計算機編程必須熟悉二進制。熟悉二進制有以下幾個用途:

l更容易理解計算機的數據存儲方式

計算機內部的很多轉換,例如數據類型之間的強轉,都可以用二進制解釋最終的結果的值。

l二進制的運算速度高

二進制的運算速度比十進制高的多。例如求2的n次方,通過移位實現的效率比數學方法高效。

l使用二進制數值進行數據存儲

以二進制的形式存儲數值,一個是比較節約資源,可以使用二進制的位來存儲信息,例如常見的硬件控制信息,都是二進制的形式進行提供的。

如前所述,二進制包含0和1兩個基數,運算規則是“滿二進一,借一當二”,下面簡單的介紹一下二進制的計數方式。

例如十進制的0-9用二進制進行表達,則依次是:

0,1,10,11,100,101,110,111,1000,1001

說明:數值之間使用逗號進行間隔。

下面是二進制的一些基本運算結果:

l加法運算
     0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10
l減法
0 – 0 = 0
0 – 1 = -1
1 – 0 = 1
1 – 1 = 0
l乘法
0 × 0 = 0
0 × 1 = 0
1 × 0 = 0
1 × 1 = 1
l除法
0 / 0  無意義
0 / 1 = 0
1 / 0  無意義
1 / 1 = 1

以下是一些符合的表達式:

110 + 111 = 1101

這些基本的運算結構在實際開發中一般不會直接用到,但是通過這些內容可以加深對於二進制概念的理解。

1.2.2 二進制和十進制之間的轉換

由於計算機內部的數據是以二進制進行表達的,而十進制又是日常生活中最常用的進制,所以它們之間經常需要進行轉換。下面介紹一下轉換的方式。

1.2.2.1 十進制轉換為二進制

十進制整數轉換為二進制有三種方法,分別是除二取余、計算器轉換和經驗法。十進制小數的轉換方法最後做簡單的介紹。

1.除二取余法

除二取余法是轉換時的最基本方法,也是最通用的方法。規則為:使用十進制和2去除,取每次得到的商和余數,用商繼續和2相除,直到商為零為止,第一次得到的余數作為二進制的低位,最後一次得到的余數作為二進制的高位,由余數組成的數字就是轉換後二進制的值。例如十進制的13轉換為二進制的計算步驟如下:

商      余數
     13/2=6      1
6  /2=3      0
3  /2=1      1
1  /2=0      1
          則計算的最終結果就是1101。
2.計算器轉換

Windows操作系統中的計算器也可以很方便的實現進制之間的轉換。在程序菜單中附件子菜單中打開計算器,從打開的計算器的查看菜單中,選擇“科學型”,輸入你要轉換的十進制的數字,例如13,然後界面上數字顯示框西側的“二進制“,則轉換後的數值就直接顯示在計算器中。

3.經驗法

對於二進制熟悉以後,那麼計算十進制對應的數字可以通過一些基本的數學變換來實現,在使用經驗法以前,必須熟記2的0-10次方對應的十進制的值,依次是:

1,2,4,8,16,32,64,128,256,512,1024

則轉換一些特殊的數字時可以極大的提高轉換速度,例如數字65,則可以這樣轉換:

65 = 64 + 1

64對應的二進制形式為1000000

1對應的二進制形式為1

則65的二進制形式為1000001

這個只適合轉換一些特殊的數字,適應性沒有除二取余法廣泛。

十進制小數的轉換采用的一般方法是乘二取整法,規則為:對於小數部分先乘二,然後獲得運算結果的整數部分,然後將結果中的小數部分再次乘二,直到小數部分為零為止,則把第一次得到的整數部分作為二進制小數的高位,後續的整數部分作為地位就是轉換後得到的二進制小數。需要說明的是,有些十進制小數無法准確的用二進制進行表達,所以轉換時符合一定的精度即可,這也是為什麼計算機的浮點數運算不准確的原因。

例如0.25轉換為二進制小數的步驟如下:

整數部分

0.25 × 2 = 0.5   0

0.5× 2 = 1.0   1

則0.25轉換為二進制小數為0.01

如果一個十進制數字既有整數部分,也有小數部分,則分開進行轉換即可。

1.2.2.2 二進制轉換為十進制

二進制轉換為十進制采用的方法是:數字乘位權相加法。下面先以十進制為例來說明該方法,例如十進制數字345的值,5的位權是1,4的位權是10,3的位權是100,則有如下表達式成立:345=5 × 1 + 4 × 10 + 3 × 100,這就是數字乘位權相加法的原理。

其實對於十進制整數的位權很有規則,從右向左第n位的位權是十的(n-1)方,例如個位是10(1-1),十位是10(2-1),依次類推。那麼二進制整數的位權規律和這個一致,也就是從右向左第n位的位權是二的(n-1)方。

例如二進制整數1011轉換為十進制的表達式為:

[1011]2 = 1 × 20 + 1 × 21 + 0 × 22 + 1 × 23 = 1 + 2 + 0 + 8=11

而對於二進制的小數,也是采用一樣的方法,只是二進制小數的位權規則為,小數點後第一位小數的位權是2的-1次方,第二位是2的-2次方,依次類推。

例如二進制小數0.1101轉換為十進制小數的表達式為

[0.1101]2=1 ×2-1 + 1 ×2-2 + 0 × 2-3 + 1 × 2-4 = 0.5 + 0.25 + 0 + 0.0625=0.8125

同理,如果二進制包含整數和小數部分,則分開進行轉換即可。

1.2.3 二進制和八進制、十六進制之間的轉換

雖然二進制是計算機內部的數據表達形式,但是由於二進制基數太少,則導致數字比較長,為了簡化數字的書寫,就創建了八進制和十六進制。八進制和十六進制就是對二進制的簡化,所以二進制到八進制和十六進制的轉換非常簡單。

二進制整數轉換為八進制的方法是“三位一並“,也就是從右側開始,每3位二進制數字轉換為八進制的一位,依次類推,因為二進制的三位數字可以表達的區間是000-111,剛好和0-7重合。例如:

二進制的10111轉換為8進制為:最後三位111轉換為7,前面的數字10轉換為2,則轉換後得到的八進制數字為27。

二進制整數轉換為十六進制的方法是“四位一並“,例如10111轉換為十六進制是0111轉換為7,1轉換為1,則轉換後得到的十六進制數字是17。

二進制小數轉換為八進制的方法也是“三位一並“,只是轉換時從小數的高位開始,也就是小數的左側開始。例如0.10111轉換為八進制是101轉換為5,110轉換為6,則轉換得到的八進制小數為0.56。需要特別注意的是,小數最後如果不足三位,一定要在後續補零以後再進行轉換。

二進制小數轉換為十六進制的方法也是“四位一並”,只是轉換時從小數的高位開始。例如二進制小數0.10111轉換為十六進制小數為,1011轉換為b,1000轉換為8,則轉換後得到的十六進制是0.b8。

如果二進制數包含整數和小數部分,則分開進行轉換。

文章來源:http://blog.csdn.net/Mailbomb/archive/2008/04/08/2259733.aspx

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved