C語言基礎-----進制轉換,原碼反碼補碼

 

進制轉換,原碼反碼補碼

========================================

進制和補碼

1.二進制

2.十六進制

3.八進制

4.數據在內存中的存儲方式

  1)正數和負數

  2)原碼,反碼,補碼

========================================

n進制的兩個特點:

 

1、有基本數字n

2、滿n進一

 

十進制

1、十進制產生的原因:

十個手指;

2、十進制的規律 

基本數字:0123456789 (十個基本數字)

進位:   9+1=10


二進制

1、二進制的表示方式:

  0  1

2、導出二進制的規律

基本數字:01(兩個基本數字)

進位: 1+1=  0b10

 

 

3、爲什麼需要二進制:

  1)供計算機內部使用(計算機裏面以二進制存儲數據)

  2)爲什麼計算機內部要使用二進制  

    電路簡單,由邏輯電路組成,開1,關0

     邏輯,真,假;

4、十進制和二進制之間的轉換

  1)十進制轉換爲二進制

 

   十進制轉化爲二進制

1、除以2取商繼續除以2,一直除到商爲0爲止

2、最後將所有的餘數從下往上逆序排

 

 

計算:11的二進制

11的二進制: 

112=5…..1            0

5  ÷ 2=2……1            1

2 ➗2=1….0     2

12 =0.。。1   3

 

11 的二進制爲:0b1011

 

計算15的二進制

 

152=7.。。1

72=3.。。。1

32=1.。。。1

12=0.。。。1

 

 

15 的二進制:ob1111

 

65的二進制?

1000001

652=32.。。1   0

322=16.。。0    1

162=8.。。。0   2

82=4.。。。0     3

42=2.。。。。0  4

22=1.。。。0     5

12=0.。。。1     6

 

ob1000001


2)求1 2 4 8 16 32 64 128的二進制並找出其規律

            

8開關

          

10000 0001   2^0

20000 0010

40000 0100

80000 1000

160001 0000

320010 0000

640100 0000

1281000 0000

 

  7654 3210

 

 

 

   二進制轉化爲十進制:

十進制:1215 = 5*10^0+1*10^1+2*10^2+1*10^3=1215

3210

 

示例:0b101011

 

0b101011 =  1*2^0+1*2^1+0+1*2^3+0+1*2^5=

    543210

 

 

101011 的十進制爲:543210

 

練習:

10000 1010=1*2^1+1*2^3=2+8=10

=2+8=10

21001 1111  = 1+2+4+8+16+128=31+128=159   

30001 0011  =1+2+16=19

40100 0100  =4+64=68

51111  1111  =  255

 

   1111 1111

+                1

———————

1 0000  0000


0 1000 0000 =128

256-1=255

 

 

 

=================================================

 

十六進制

 

 

1、十六進制的表示方式和範圍

0x1234ff

 

十六進制數的規則

基本數字: 0,1,2,3,4,5,6,7,8,9, a,b,c,d,e,f  (十六個基本數字)

0~9

ab,c,d,e,f  :  10,  11 , 12 ,13, 14,15

進位:1+f=0x10

 

 


0b111111111000000111

0xffa

 

2.爲什麼需要十六進制

  1)計算機以二進制存儲數據,但二進制數太長了,

面對這麼長的數進行思考或操作,

沒有人會喜歡,用16進制或8進制可以解決這個問題。

 

  2)不過,爲什麼偏偏是168進制,而不其它的,諸如920進制呢?

因爲2816,分別是21次方,3次方,4次方。這一點使得三種進制之間可以

非常直接地互相轉換。8進制或16進制縮短了二進制數,但保持了二進制數的表達特點。

16,  2^4=2*2*2*2=16

8   ,2^3=2*2*2=8

 

3、十六進制與十進制的轉換

 

  1)十進制如何轉化爲十六進制?

 

十進100 -> 十六進制

1、除以16取商繼續除以16,一直除到商爲0爲止

2、最後將所有的餘數從下往上逆序排列,前面加上前綴 0x

 

100的十六進制爲:

 

10016=6.。。。4      0

6   16=0.。。。6       1

 

100十六進制:0x64

 

練習: 

   1、將下列十進制數轉換爲十六進制

116  =0x10                 232  = 0x20

364    =0x40               488  =0x58

 

  2)如何將十六進制轉換成十進制

例如:

0xabf =  15*16^0+11*16^1+10*16^2=

        210

 

   2、將下列十六進制數轉換成十進制數

10xf   = 15*16^0=15*1=15

         20x10  = 1*16^1+0=16  

     30x123  =  1*16^2+2*16^1+3*16^0= 256+32+3=291

 

 

 

==========================================

10進制轉換n進制:

除以n,取商繼續除以n,一直除到商爲0爲止

將餘數從下往上讀;

 

n進制轉換10進制:

按位展開:

x*n^位數+。。。+。。

 

 

===========================================

 

4、十六進制與二進制之間的轉換

  1)十六進制數轉化爲二進制數

     每位十六進制數轉換爲4個二進制數

16=2^4

1—>4

 

0xf==15

0b1111==15

 

0x3 a

   10==1010

        3==0011

     11 1010

0x3a 二進制爲:0b111010

 

 

  2)二進制數轉化爲十六進制數

     從低位到高位,每4位一取,不足高位補0

4—>1

 

例如:

0011 1010

   

111010 的十六進制數:0x3a

 

0101 1110

  5       14==e

 

 

1011110 的十六進制:0x5e

 

 

 

   3、將下列二進制數轉換成十六進制數

11010  =0xa    

20001 1111  =0x1f

         1       f

30001  0011 =0x13

          1    3

40100   0000=0x40

         4     0

51000  0001   1111=0x81f

          8       1           f

 

 

   4、將下列十六進制數轉換爲二進制

  1—>4

 

10x4 5 = 1000101

        0100   0101

20x1  5  9  = 101011001

0001 0101  1001

30x5  6  0=10101100000 

0101   0110    0000   

40x2 4 6 8  = 10010001101000 

           0010   0100   0110 1000

 

 

 

 

 

 

 

 

==================================================

八進制(非重點,不常用)

1、八進制的表示方式和規則

10

010  = 10

== 8

2)基本數字:01234567

進位:   1+7=010

2、二進制與八進制之間的轉換

          1)二進制轉化爲八進制

    從低位到高位3位一取,不足補0

           8=2^3

例如:

0b101 010

  5    2

   0b101010的八進制:052

 

  2)八進制轉化爲二進制

     1位八進制轉換成3位二進制

 

 

01 7

001111

 

   017的二進制:0b1111

==================================================

 

5、位圖概念 

 比特位    bit

01

 

1bit    1開關

8bit = 1Byte  =1B 1字節

 

1KByte=1024Byte=2^10Byte

1MByte= 1MB=1024KByte

1GByte=1GB=1024MByte

0000 0000

1111 1111

 

1GB=1024MB=1024*1024KB=1024*1024*1024B

 

10 普通的整數

一個普通正數    至少需要32

10

1010

32bit

00000000 00000000 00000000 00001010

  最高位                         最低位                          0

-10

  1010

最高位是符號位:正數:0,負數:1

10000000 00000000 00000000 00001010

 

1.一個普通的整數需要至少32個位表示

2.左邊是高位,右邊是低位

3.右邊第1個二進制位稱爲第0

計算機中的有符號數表示:

4.最高位稱爲符號位,0表示正數,1表示負數

 

 

計算機存儲數據:

編碼方式3種:  原碼,反碼,補碼

 

正數:(三碼相同)  原碼=反碼=補碼

 

1

0000 0001  (原碼)

0000 0001    (反碼)

0000 0001    (補碼)

 

負數: 

 -1

         

原碼:最高位置      1000 0001 

反碼:最高位保持不變,其餘取反:1111 1110

補碼:在反碼基礎上加1 1111 1111

 

 

計算機存儲都是有符號數

1

 

-1


計算機沒有減法器,有加法器

1-1=1+-1=

 

原碼:

  1 - 1 = 1 + -1= 0

 

  1  0000 0001

  -1 1000 0001

 

    0000 0001

+  1000 0001

———————————

    1000 0010

   =-2

 

 

 

反碼:

1 - 1=1+-1=0

 

1  0000 0001

-1 1111 1110

 

  0000 0001

+       1111  1110

—————————————

1111  1111

==     1000 0000

 ==         -0

0000 0000

    0-0

 

 

補碼:

 

 

  0000 0001

-1   1111 1111

 

        0000 0001

+      1111  1111

————————————

  10000 0000       

 

       0000 0000 ==0

 

帶符號位進行運算,補碼

 

計算機保存數據  補碼

 

數據在內存中的表示方式.

計算機的編碼方式有三種:原碼、反碼和補碼

1.補碼

  1)在計算機系統中,數值統一使用補碼來表示和存儲

 

2.爲什麼要使用補碼

  1)計算機只有加法器,將符號位一起參與運算

  2)兩個用補碼錶示的數相加時,如果最高位(

號位)有進位,則進位被捨棄

 

3.計算機內部如何表示一個數

  1)正數

    1>正數的三碼相同

  

  2)負數

    1>負數的原碼 

    2>通過原碼計算

    3>正數負數在內存中真正的表示方式--補碼

   

4>補碼計算方式

負數:

1)符號位不變

2)剩餘所有二進制數取反----反碼

3)對反碼進行+1操作

 

補碼 ---- > 原碼

1>0000 0001

-1   —>原碼

1111 1111

1000 0001

 

 

 

6>補碼轉換爲原碼  (負數)

1)符號位不變

2)剩餘所有二進制數取反

3)+1操作

 

 

練習:

1.計算以下數的二進制補碼

1-12,     2-10,        3-15,       4-1

32bit

-12   1100

10000000 00000000 00000000 00001100    -12原碼

11111111   11111111   11111111   11110011    -12反碼

11111111   11111111   11111111   11110100  -12補碼)

-10  1010

10000000 00000000 00000000 00001010     -10原碼

11111111   11111111  11111111   11110101      -10 反碼

11111111   11111111  11111111   11110110   -10補碼)

 

-15  1111

10000000 00000000 00000000 00001111   -15原碼

11111111   11111111   11111111  11110000   -15反碼

11111111   11111111   11111111   11110001  -15補碼

 

             -1

1000000 00000000 00000000 00000001   -1原碼

11111111 11111111   11111111  11111110    -1反碼

11111111 11111111   11111111   11111111   -1補碼

 

 

 

 

 

2.通過二進制計算下列數的結果 

-5+6 = 1, -10+6=-4, 20+(-1)

32bit

 

-5101

10000000 00000000 00000000 00000101   原碼

11111111 11111111    11111111 11111010       反碼

11111111 11111111 11111111 11111011    補碼

 

11111111   11111111   11111111  11111011      (-5補碼)

+           00000000 00000000 00000000 00000110    6補碼)

——————————————————————————————————

           1 00000000 00000000 00000000 00000001                                                               

== 00000000 00000000 00000000 00000001  ==1

 

   -10+6  =-4

1010

10000000 00000000 00000000 00001010   原碼

11111111   11111111   11111111  11110101    反碼

11111111  11111111 11111111 11110110  補碼

 

         11111111   11111111   11111111  11110110   -10補碼)

  +     00000000 00000000 00000000 00000110   6補碼)

———————————————————————————————

1111111 11111111      11111111      11111100   (補碼)

補碼》原碼  

最高位保持不變,其餘取反,再+1

 

10000000 00000000 00000000 00000100  -4

 

20+-1=  19

0000000 0000000 00000000 00010011   ==19 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章