程式設計基礎知識(變簡單的進製轉換)

2021-10-25 08:50:35 字數 3689 閱讀 9624

世界上有10種人,懂二進位制的和不懂二進位制的。

有同學會問,你說世界上有10種人,為啥只說了兩個呢。這裡的10可不一定是自然數十,也可能是二進位制的一和零,不懂的同學看完這篇文章保證你明明白白(不明白你來打我)。

進製就是進製,是人們規定的一種進製方法。比如x進製,就是每逢x就進一位。二進位制是逢二進一,八進位制是逢八進一,十進位制是逢十進一,十六進製制是逢十六進一。乙個數值可以在不同的進製之間轉換,就是我們接下來要講的進製轉換。

1.按權相加法

將二進位制每一位上的數乘以權,然後加起來的和就是十進位制。

權:假設x進製,整數部分的第i位的權是xi−

1x^

xi−1

,小數部分第i位權為x−i

x^x−

i.將二進位制101.01轉換為十進位制,示例如下:

1 ∗2

2+0∗

21+1

∗20+

0∗2−

1+1∗

2−2=

5.25

1*2^2+0*2^1+1*2^0+0*2^+1*2^=5.25

1∗22+0

∗21+

1∗20

+0∗2

−1+1

∗2−2

=5.2

5因為0乘任何數都為零,所以我們可以簡化一下:

1 ∗2

2+1∗

20+1

∗2−2

=5.25

1*2^2+1*2^0+1*2^=5.25

1∗22+1

∗20+

1∗2−

2=5.

252.口演算法

如果你嫌上面的演算法太繁瑣,可以練習口算,我個人比較喜歡的一種方法,適合日常計算一些簡短的二進位制(常用於計算ip位址)。你仔細觀察的話會發現上面的公式是有規律的:將二進位制位上的數乘以權i,結果是0

00或是2

i2^i

2i,這有就像在玩2048遊戲。

2048

1024

512256

12864

321684

21

二進位制:110

1010

1對照: 128

6432168

421

將二進位制1對應位置的數相加,0對應的數忽略,結果為

128 +64

+0+16

+0+4

+0+1

=213

128+64+0+16+0+4+0+1=213

128+64

+0+1

6+0+

4+0+

1=21

3十進位制轉換二進位制時,整數與小數部分轉換方法不同,我們可以分開轉換,最後再合併一起。

1.整數部分—除二取餘法

將整數部分除以2,取餘數,商繼續除2,直到商為0為止,最終餘數倒著寫出來就是轉換完成的二進位制數。

比如將十進位制數10,轉換為二進位制數:

10/2

=商5餘05/

2=商2餘12/

2=商1餘01/

2=商0餘1

將餘數從後到前列出來,就是10的二進位制數:1010

2.小數部分—乘二取整法

將小數部分乘以2,取整數部分,剩餘小數繼續乘以2,直到小數部分為0為止。

比如將十進位制小數0.125,轉換為二進位制數:

0.125*2

=0.25 整數部分0

0.25*2

=0.5 整數部分0

0.5*2=

1 整數部分1

注意小數部分不是逆序取值了,而是順序,所以0.125的二進位制數是:001

3.口演算法

跟二進位制轉十進位制的原理是一樣的,只不過是反著來而已。用十進位制數減參照數(最接近本身數值,又小於等於本身數值的),減的開就得1,減不開就得0,差繼續遞減參照數。

2048

1024

512256

12864

321684

21

比如我們再把213轉回去:

213

-128

=85 減開得185-

64=21 減開得121-

32 減不開得021-

16=5 減開得15-

8 減不開得05-

4=1 減開得11-

2 減不開得01-

1 減開得1

最終結果為:1101 0101,是不是和上面一樣。

八進位制與二進位制的關係:23=

82^3=8

23=8

,即用三位二進位制數表示乙個八進位制數。

1.取三合一法

從二進位制小數點位置,向左向右每三位取成一位(不足三位補零),將每一位的三個二進位制數轉換為十進位制數,然後按順序排列,得到的便是八進位制數。

如將1101.01轉化為八進位制:

001

101.

01015.

2

最終結果為:15.2

1.取一分三法

逆行上面的演算法,將八進位制每一位數分解成三位二進位制數,然後去零,便能得到結果。

如將八進位制數43.2轉換為二進位制數:

43.

2100

011.

010

最終結果為:100 011.01

二進位制與十六進製制的關係:24=

162^4=16

24=1

6,即用四位二進位制數表示乙個十六進製制數。相信大家都猜到了,他們的轉換方式與八進位制的相似。

1.取四合一法

從二進位制小數點位置,向左向右每四位取成一位(不足四位補零),將每一位的四個二進位制數轉換為十進位制數,然後按順序排列,得到的便是十六進製制數。

如將二進位制數101011.101轉換為十六進製制:

0010

1011

.1010

2 b . a

最終結果為:2b.a

1.取一分四法

將一位十六進製制數分解為四位二進位制數,去掉多餘的零。

如將十六進製制數6e.2轉換成二進位制數:

6   e   .

20110

1110

.0010

1101110

.001 \\去零

得到最終結果為:110 1110 . 001

十六進製制與八進位制不能直接轉換,可以先將其轉換為二進位制,再轉換為其他進製。

1.直接轉換

與二進位制按權相加法相同,只需改變x

xx的值便可。

將x

xx進製每一位上的數乘以權,然後加起來的和就是十進位制。

權:假設x進製,整數部分的第i位的權是xi−

1x^

xi−1

,小數部分第i位權為x−i

x^x−

i.2.間接轉換

先將其轉換為二進位制數,再將二進位制數轉換為相應進製數即可。

有的同學剛接觸進製轉換可能會比較懵逼,甚至不清楚進製的含義,其實只要把二進位製弄明白,其餘進製的轉換就會變得很ez。

還沒看懂的同學先別著急拔刀,讓我先跑39公尺,溜了~

基礎知識 變數型別

為何變數值 即記錄的資料 要區分型別呢?變數值使用來記錄事物狀態的,而事物的狀態 是各種各樣的,所以對應著就應該用不同型別的值 去記錄這些狀態 作用 記錄描述性質的狀態 定義 在 中包含一串字元 name egon 單行字串 多行字串 msg aaaa bbbb ccc 外層用單引號,內層就應該用雙...

c語言基礎知識 變數

a 3 我們今天主要來談談變數,就是 a 1.變數是什麼 2.變數的三要素int a 讓我們乙個乙個來解釋 變數的型別 變數名變數的定義。3.一點思考 為什麼整形變數會存在溢位現象呢?溢位 int a 2147483647 int b a 1 最終 b 2147483648為什麼浮點型變數會有精度的...

C 基礎知識 變數儲存位置

1.棧區 stack 程式執行時由編譯器自動分配 存放 函式的引數值,區域性變數的值。儲存連續,其操作方式類似於資料結構中的棧。棧區處於相對較高的位址以位址的增長方向為上的話,棧位址是向下增長的,所以空間有限,windows下大多1 2m。2.堆區 heap 在記憶體開闢另一塊儲存區域。一般由程式設...