Java程式設計那些事兒7 進製的概念

2021-06-20 09:16:48 字數 3903 閱讀 6347

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=61

6/2=30

3/2=11

1/2=01

則計算的最終結果就是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.50

0.5×2=1.01

則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。

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

Java程式設計那些事兒 如何學好程式設計

俗話說 興趣是最好的老師 但是只靠興趣是遠遠不夠的,還需要付出艱辛的努力。程式設計是一種技能,需要在較短的時間內學會,就不能像學習漢語一樣,通過十幾年甚至更長的時間來學好,也不能像英語那樣進行業餘學習,以至很多大學畢業的人英語水平也不敢恭維,也達不到實用的程度。那麼如何學好程式設計呢?或者更現實一點...

進製轉換的那些事兒

進製轉換是一種較為特殊的數字拆解 進製這事兒,說到底就是位值原理,即 同乙個數字,放在不同的數字上,代表不同大小的 量 例如 十進位制中,百位上的1表示100,十位上的1表示10。任何進製中,每個數都可以按位權展開成各個數字上的數字乘以對應數字的位權,再相加的形式,如 十進位制的123 1 100 ...

進製轉換的那些事兒

進製轉換是一種較為特殊的數字拆解 進製這事兒,說到底就是位值原理,即 同乙個數字,放在不同的數字上,代表不同大小的 量 例如 十進位制中,百位上的1表示100,十位上的1表示10。任何進製中,每個數都可以按位權展開成各個數字上的數字乘以對應數字的位權,再相加的形式,如 十進位制的123 1 100 ...