數據結構:進制轉換


計算機的內存都是以二進制的形式進行數據存儲:

>>以十進制為參考點:

1.十進制轉二進制:39(10)=100111(2)

 例:39/2 = 19 1

    19/2 = 9  1

    9/2  = 4  1

    4/2  = 2  0

    2/2  = 1  0

    1/2   = 1  1

 

從下往上數100111

 

 

???數轉換的特征

10→2: (57.75)10 = (111001.110)2

整數部分     57/2   1                        小數部分         

                                                      0.75*2  1    

28/2   0                                 (1.5-1)*2  取 1

14/2   0                                 (1.0-1)*2  取0

            7/2    1     

            3/2    1     

            1/2    1  

於小數部分的一定要正取,整數部分的要逆取。 

 

 

 

2. 十進制轉八進制:358(10)=546(8)

 

例:358/8 = 44 6

    44/8  = 5 4

5/8   = 0 5

 

3. 十進制轉16進制:120(10)=78(16)

例:120/16 = 7 8

7/16   = 0 7

 

特征:

 

 

 

 

>>其他進制轉十進制:

1. 二進制轉十進制:

111101(2)= 1*2的0次方+ 0*2的1次方 + 1*2的2次方 + 1*2的3次方 + 1*2的4次方 + 1*2的5次方

          = 1*1+ 0*2+ 1*4+1*8+ 1*16 +1*32

          = 1+ 0 + 4+ 8+ 16+ 32

          = 61(10)

 

例:01.101(2)=?(10)

開始把0.101轉換成10進制的。

    小數點后面的“1”,處於負一位,后面的“0”處於負二位,在后面的“3”處於負三位,

   因為是2進制的轉換成10進制的,那么0.101=1*2的-1次方+0*2的-2次方+1*2的-3次方=0.5+0+0.125=0.625

將整數部分的和小數部分的相加,5+0.625=5.625   即101.101(2)=5.625(10)

 

8進制,16進制轉換10進制,將“1*2的-1次方+0*2的-2次方+1*2的-3次方”里面的乘號后面的“2”分別換成“8”和“16”就好了。其余的都雷同上述。

 

2. 八進制轉十進制:

224(8)=148(10)

224:

第0位  4*8的0次方     = 4

第1位  2*8的1次方     =16

第2為  2*8的2次方     =128

 

 

 

3. 16進制數轉換成10進制數

2AF5(16)=10997(10)

16進制數2AF5的第0位為“5”,第1位為“F”, 第2位為“A” 第3位為“2”

第0位    5*16的0次方  =5

第1位    F*16的1次方  =240

第2位    A*16的2次方  =2560

第3位    2*16的3次方  =8192

 

@7

在2進制中只有2個數字,既1,0

在8進制中只有8個數字,既0,1,2,3,4,5,6,7

在10進制中有10個數字,既0,1,2,3,4,5,6,7,8,9

在16進制中有10個數字和6個字母,既0,1,2,3,4,5,6,7,8,9和A,B,C,D,E,F,

   字母A代表數字10,字母B代表數字11,字母C代表數字12,字母D代表數字13,字母E代表數字14,字母F代表數字15,

 

 

 

 

>>二進制轉換16進制:

1.制轉換為十六進制,因為2的4次方等於16,所以4個二進制就等於一個十六進制。

 

1001=1*2的0次方+1*2的3次方=9

 

 

1111=1*2的0次方+1*2的1次方+1*2的2次方+1*2的3次方=15=F

1110=1*2的1次方+1*2的2次方+1*2的3次方=14=E

0001=1*2的0次方=1

1111011111001=1EF9

 

原理: 四位二進制數寫成:   b3   b2   b1   b0

                                                                       1 --- 有一個 1 (2^0 =1)

                                                                 1 --- 有一個 2  (2^1=2)

                                                          1 --- 有一個 4   (2^2=4)

                             1 --- 有一個 8 (2^3=8)

這叫作權 (8,4,2,1)

就如同十進制數的個十百千一樣。

二進制 十進制 16進制

0000=0=0

0001=1=1

0010=2=2

0011=3=3

0100=4=4

0101=5=5

0110=6=6

0111=7=7

1000=8=8

1001=9=9

1010=10=A (10)

1011=11=B (11)

1100=12=C (12)

1101=13=D (13)

1110=14=E (14)

1111=15=F (15)

 

 

 

 

 

2.制轉換八進制:

二進制 數可以用1位 八進制 數表示

列表如下

二進制   八進制

000           0

001           1

010           2

……

111          7

 

如果是多位,就從低向高數,每3位二進制數分在一組,表示一個八進制數,比如二進制1011表示為八進制為13,二進制011001111表示為八進制為317

 

 

 

 

>>負數的二進制表示方法

假設有一個 int 類型的數,值為5,那么,我們知道它在計算機中表示為:

00000000 00000000 00000000 00000101

5轉換成二制是101,不過int類型的數占用4字節(32位),所以前面填了一堆0。

現在想知道,-5在計算機中如何表示?

在計算機中,負數以其正值的補碼形式表達

什么叫補碼呢?這得從原碼,反碼說起。

 

原碼:一個整數,按照絕對值大小轉換成的二進制數,稱為原碼。

比如 00000000 00000000 00000000 00000101 是 5的 原碼。

 

反碼:將二進制數按位取反,所得的新二進制數稱為原二進制數的反碼。

取反操作指:原為1,得0;原為0,得1。(1變0; 0變1)

比如:將00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。

稱:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反碼。

反碼是相互的,所以也可稱:

11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互為反碼。

 

補碼:反碼加1稱為補碼。

也就是說,要得到一個數的補碼,先得到反碼,然后將反碼加上1,所得數稱為補碼。

比如:00000000 00000000 00000000 00000101 的反碼是:11111111 11111111 11111111 11111010。

那么,補碼為:

11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011

所以,-5 在計算機中表達為:11111111 11111111 11111111 11111011。轉換為十六進制:0xFFFFFFFB。

再舉一例,我們來看整數-1在計算機中如何表示。

假設這也是一個int類型,那么:

1、先取1的原碼:00000000 00000000 00000000 00000001

2、得反碼:     11111111 11111111 11111111 11111110

3、得補碼:     11111111 11111111 11111111 11111111

可見,-1在計算機里用二進制表達就是全1。16進制為:0xFFFFFF

 

 

 

 

 

>>二進制的運算方法:

二進制數的運算方法 同十進制都屬於 進位 運算方法,它們有類似的地方,當然也有不同的地方,二進制下只有加法。乘法和減法是變相的加法,除法只是簡單地移位。

首先,簡單的說明一下,什么是進位 運算方法?    十進制含有的數是 0 1 2 3 4 5  6 7 8 9  十個數, 而二級制只有兩個數 0 1 

比方說十進制數1234=1x10^3 + 1x10^2 + 3x10^1 + 4x10^0

其中1 2 3 4 分別居在 千位 十位 百位 個位 。

同樣的二進制數 里也存在一樣的位制 

二進制化十進制

二進制的1010  =1 x 2^3+ 0 x 2^2 + 1 x 2^1+ 0 x 2^0 =  10 (十進制)

同 理十進制化為二進制 :10(10)=1 x 2^3+ 0 x 2^2 + 1 x 2^1+ 0 x 2^0 =1010(2)因為我們不能較快的獲 得有多少個 2^0 2^1  2^2   2^3  2^4  2^5  2^6 ........2^n 所以才有短除法這一形式來輔助運算 除2取 余法

  10/2=5.......0 

   5/2=2........1  

   2/2=1........0   

   1/2=0........1      把結果倒過來寫就是1010了 

以上是進制的轉換。

加法:

下面就是加法的運算   

  十進制下有                                                   二進制下就有

     1234                                                                     1011                                                                    

+   2846                                                            +       1111                    

—--.--.—---                                                         ------.-.-.------                                                   

     4080                                                                   11010   

總的來說 二進制下和是十進制的運算時一樣的,

十進制下滿十進一,二進制下滿二進一。

減法 有兩種方式    以下是特殊情況  注意第一位是符號位。  0代表正數, 1 代表負數

           。。                                             另一種方式是吧減法當成加上一個負數

  0    1 0 0 1                                                             0     1001

- 0    1 1 1 1             《===》                        +         1     0001             

----------------                                                 ------------------。------

  1    1 0 1 0           算的結果是負數                           1    1010

負數與成正數互化就是取反加一

取反 0 1 0 1

+               1

---------------  

 負的 0 1 1 0 =負的 0x2^3+1x^2+1x2^1+0x2^0=  負6              

表示方法是取反加一 前面的第一位是符號位 1 代表負數  1  1110

乘法111x111=    1   1   1

             x            1   1   1

    --------------------------------

                          1    1   1

                     1   1    1

+               1  1   1     

-----------------------------------

            1   1   0   0   0    1

除法:

           1 1 1 1 / 1 0= 111  

   1111 / 11 = 101

除法和十進制的出發類似 不同的是這里是不會出現小數的 就像例子中的1 1 1 1 / 1 0= 111   化成十進制是 15除以2 但是結果卻是111=7 因為那個余數1 已經被擠出去了,這里涉及到了計算機的內存問題 這就不深究 知道怎么算就好了 

以0x開始的數據表示16進制,計算機中每位的權為16,即(16進制)10 = (10進制)1×16

 

 ​​​​​​​


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM