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 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(C,基础C语言)