C语言入门零基础:5、进制数和进制转换

前提:

printf语句和scanf语句是源自与stdio.h这个头文件中的函数,它们的作用分别是输出和输入。

应用:

        printf("hello world\n");   //用于输出(打印)hello wolrd这个语句。

        int a;

        scanf("%d",&a);      //用于向a空间输入一个整形数据

注意:使用scanf的前提是先要定义一个变量(开一个空间)。

一、进制数和进制前缀

        1、进制数:

                C语言里面的进制数:二进制  八进制  十进制 十六进制
        
                十进制:逢10进1,每一位上的数字是0 ~ 9
                二进制:逢2进1,每一位上的数字 0 、1
                八进制:逢8进1,每一位上的数字0 ~ 7
                十六进制:逢16进1 ,每一位上数字0 ~ 9 a b c d e f

        2、进制前缀      

                在数据的前面加前缀表示不同的进制数

                二进制:0b或0B

                八进制:0

                十进制:没有前缀,C语言中默认就是十进制

                十六进制:0x或0X

二、不同进制数的输入和输出

        格式控制符:          

                                         short       int         long          long long
            十进制                  %hd       %d         %ld             %lld
            八进制:              %ho         %o       %lo             %llo
            十六进制:           %hx         %x       %lx             %llx
            
            如果要输出显示前缀可以:%#hx        %#x        %#lx          %#llx

注意:二进制没有格式控制符(无法直接输出二进制格式的数据)

三、进制转换

        1、十进制转二进制、八进制、十六进制数

                由十进制数除以要转的进制(如需转二进制,即除以2),得到的商继续除以要转的进制,直到商为0,然后每一轮的余数逆序排列。(不好理解可看图)

        

                        (实在没耐心画了,见谅见谅哈哈)。

        2、二进制  八进制 十六进制 转 十进制  

 
            规律:相应位置上的数字*权重,相加

            权重:数据的每一位上都对应一个权重,以二进制举例,从低 位到高位,该位权重等于上一位权重乘以二,最低为权重为2的零次幂。
            
            10进制:    3         4       5         6
                           1000    100     10        1
                           10^3    10^2  10^1   10^0
                       
                       3*10^3 + 4*10^2 + 5 * 10^1 + 6 * 10^0 == 3456
                       
            2进制的数据:0b 1         1       0        1
                                       2^3    2^2    2^1     2^0
                            
                            1*2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 8 + 4 + 1 == 13
                            
            8进制的数据:  0 1      4        1
                                    8^2     8^1    8^0
                            
                            1*8^2+4*8^1+1*8^0 == 64 + 32 + 1 == 97
                            
            16进制的数据:0x6      1
                                    16^1  16^0

        3、二进制  八进制 十六进制之间的转换: 

           
                     1位八进制== 3位二进制  (421)
                     1位十六机制 = 4位二进制 (8421)

            
                    8进制数:
                        0 ~ 7
                
                        00 ~ 000
                        01 ~ 001
                        02 ~ 010
                        03 ~ 011
                        04 ~ 100
                        05 ~ 101
                        06 ~ 110
                        07 ~ 111
             
                    16进制数:
                        0x0 ~ 0b00000000 
                        0x1 ~ 0b00000001
                        0x2 ~ 0b00000010
                        0x3 ~ 0b00000011
                        0x4 ~ 0b100
                        0x5 ~ 0b101
                        0x6 ~ 0b110
                        0x7 ~ 0b111
                        0x8 ~ 0b1000
                        0x9 ~ 0b1001
                        0xa ~ 0x1010
                        0xb ~ 0x1011
                        0xc ~ 0x1100
                        0xd ~ 0x1101
                        0xe ~ 0x1110
                        0xf ~ 0x1111

        4、十六进制数据存储和字节的关系


                     一个十六进制数据 == 4位二进制

                    1个字节存储8位二进制
            
                    1个字节可以存储两个十六进制数据

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值