第2节 C语言之数和数制(进制转换)


数和数制

1.1 数(数据)

     计算机存储的数据

     视频---->*.mp4 *.avi *mkv *rmvb(淘汰) *.wmv

     图片---->*.jpg *.png *.bmp

     音频---->*.mp3  *m4a  *.wma

     他们都是以特殊的编码格式存在计算机中的。

     例如 :*.mp3 格式 也是一种 音频压缩技术。mp4特殊中的压缩格式(高清的格式)。

     数值数据

         1.整数   100,10,15,0。  

              10进制数,特点逢10进1。10进制数 是我们人类交流的时候用的。

              计算机处理这些数据 100,10,15等这些10进制数据的对应的2进制数。

              计算机语言 叫机器语言是二进制的。

              二进制的数是由 0 和1 两个数字组成,特点逢二进一。

              计算机想要表示是一个二进制   0000 0101(2)

            2.进制转换  

               10进制的整数 ------>2进制的数

               例如:10 这个转换成2进制数。

               2.1 辗转相除法

                    辗转相除法求一个10进制数的2进制,循环对2取余数,直到商为0,逆序输出 余数。

               例如:

               10/2        商 5     余 0

               5/2         商 2     余  1

               2/2         商 1      余  0

               1/2          商0      余  1 

               这个数的二进制数 就是  余数逆序输出0000 1010(2)

                     

练习:求以下10进制数的对应的二进制的数。

32  ---->0010 0000(2)         2^5

8    ---->0000  1000(2)         2^3

64  

50


    第二种计算10进制数的2进制数(口算  200以内的二进制数)

     二进制数   0000  1010(2)

          2---->叫做基数   

     从左到右  叫做 由高位到低位。每一个2进制位上的数 都对应一个位的位权。位权就表示这一位2进制数对应的2的几次方。

     最右边的这一位:2^0 = 1;

     右边的第二位:2^1 = 2;

     2进制数----->10进制数  

       0000 1010 = 0*2^0 + 1*2^1+0*2^2+1*2^3 = 0+2+0+8 = 10


     快速计算2进制数的方法(200以内)

        2^8  2^7  2^6 2^5  2^4 2^3 2^2  2^1  2^0

        256  128  64   32   16    8     4      2    1

130   0       1     0      0    0     0    0       1     0

10     0       0    0      0    0     1      0      1     0

32    0       0    0      1     0     0     0      0    0

127   0       0    1       1     1      1       1       1     1

110    0       0    1      1      0     1       1       1    0

9

     3.   8进制数

         8进制数 是由0~7共8个数字组成的,逢八进一。

         一般我们表示一个数的8进制  0开头  如  0123  或者  123(8)

         辗转相除法  循环对8取余数,直到商为0,逆序输出余数。


     4.   16进制数

         16进制数 是由0~9共10个数字 以及字母A~F,组成的一  个逢十六进一的数字。

         一般表示格式为:0x00F423C04或0X00F423C04或

        00F423C04(16)

        通常 我们表示内存地址时使用。

        1>把10进制整数----->16进制整数

           辗转相除法,循环对16取余数,直到商为0,逆序输出。

           0~9   A = 10   B=11  C=12  D=13 E=14  F=15 

        例如:65这个数的16进制数

        65/16      商4        余  1

        4/16        商0        余 4

        用:0x开头表示这个数  0x41


       2>把16进制整数----->10进制的整数

           16^2   16^1   16^0

            0       4       1

       计算结果 = 1*16^0 + 4*16^1 = 1 + 64 = 65


练习:计算以下10进制整型的2进制 和 16进制数分别是多少

99   85    14    56    80   77     150    126     101     


99----> 0110 0011(2)

                              0x63


85---->0101 0101(2)

               0x55


14----->0000 1110(2)

                 0xE


56----->0011 1000(2)

                                0x38


80----->0101 0000(2)

                  0x50


77----->0100 1101(2)    

                 0x4D


150---->1001 0110(2)

                 0x96   


126----> 0111 1110(2)

                  0x7E    


101----->0110 0101(2)

                  0x65

                

   数在计算机中存储,不光只能存储一些正数,还有负数。在计算中 负数是通过这个数的二进制数的 符号位来表示

   的。一个二进制数的最高位 为符号位。来表示+ -,如果该位上的数为0 就表示这个一个正整数,如果该位上的数

   为1 就表示这个数是一个负整数。 


    数值有正负之分,整数是怎么样存储在计算中的,一个数的最高位为符号位,表示正负,这就是机器数(2进制)的源码。假设计算机的CPU中央处理器能够处理的位数 8位 ,就是一个字节1byte =  8bit,那么源码能表示的数值的范围就是

    -128  ~  0~ 127  共 256个

    有了数值的表示方法 就可以进行对数字的算术运算。(+ -  

    * /),但是很快就能发现一个问题,就是带符号位的源码进行乘法 或 除法运算时结果是正确的,但是加法 和 减法的运算有时候可能会出现问题。

    整数都是以它的补码的形式存在我们计算机中的。

    源码      反码      补码

+  源码反码补码都相同,就是这个数的2进制数。

-  负数的源码 = 先取绝对值以后 得到的这个正数的2进制数的值,然后再把最高位置成 1 。

    负数的反码 = 这个数的源码保持符号位不变,其余的每一个2进制位上的数都取反(除了符号位以外  0->1  1->0)

    负数的补码  负数的补码就是在源码的反码的基础上+1。

    补码的设计目的:(负数 四则运算用的)

    1.使符号位能够与有效的值的部分一起来参与运算(+),从而简化运算的规则。(印度人发明的)

    2.使得减法运算 转化为 加法运算。

    (这些的转换都是在计算机的最底层来实现的)。


-5 这个数的源码

     第一步 :|-5| = 5    这个数的2进制数 0000 0101   

     第二步 :把最高位置成符号位   1000 0101(2)


练习:-28 这个数的源码是多少?

     第一步:|-28| = 28   0001 1100(2)

     第二步:1001 1100(2)  表示了-28的源码


-5 这个数的反码

      第一步 :|-5| = 5    这个数的2进制数 0000 0101   

      第二步 :把最高位置成符号位   1000 0101(2)   源码

      在源码的基础上  保持符号位不变

       1000 0101(2)   源码  或1000 0101B

       1111 1010(2)    反码    ---->除了符号位 以外的其它的位上的数

练习:-28 这个数的反码是多少?

      第一步:|-28| = 28   0001 1100(2)

      第二步:1001 1100(2)  表示了-28的源码

      1110  0011(2) 或 1110 0011B 反码



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值