4、常量和进制转换

发布于:2024-11-29 ⋅ 阅读:(25) ⋅ 点赞:(0)

1、常量

1.1、常量

常量是在程序运行中值不能内改变(常数)。

        整型:12  55  

        实型:21.5

        字符型常量:  ‘A’

1.2、常量不同进制表示

        常量数据在计算机中除了用 十进制 表示,还可以用 二进制、八进制、十六进制表示。        

        十进制数据:每一位上的数字0 ~ 9   没有前缀  默认数据表示形式

        二进制数据:每一位上的数字0 ~ 1, 前缀0b  0B    0b01100001

        八进制:了解   每一位上0 ~ 7       前缀0     0141

        十六进制:数值表示或者地址  每一位上的 0 ~ 9 a b c d e f    前缀0x  0X       0x61

       

        举例:

                int a = 0141;

                int b = 0x61;

                int c = 0b01100001;

                printf("%d %d %d\n",a,b,c);  // %d是十进制的格式控制符  其他进制可以转成十进制

1.3、进制格式控制符

        short      int           long            long  long

        十进制格式控制符      %hd      %d            %ld             %lld

        八进制的格式控制符    %ho      %o            %lo             %llo

        十六进制的格式控制符  %hx      %x            %lx             %llx

        二进制没有格式控制符

        %#x --- 显示前缀

        例子:

        int a = 97;

        printf("%#d %#o %#x",a,a,a);

        不同进制之间有一定的转换关系        

1.4、进制之间的转换规则        

        a、十进制转其他进制

        b、其他进制转十进制

        c、十进制快速转二进制

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

        

        a、十进制转其他进制   97 --> 0x61  0141  0b01100001

                除以 进制数 得到余数 ,直到商为0,将余数逆序排列

                

        

        b、其他进制转十进制

                相应位上的数字*权重,相加

                先了解权重

                        十进制权重:     3       4           5       6

                                                 1000    100    10      1

                                                 10^3    10^2   10^1  10^0

                        八进制权重:    0 1    4    1

                                                  8^2  8^1  8^0

  

                     十六进制权重:  0x     6         1

                                                      16^1   16^0

   

                        二进制权重:    0b0   1    1    0    0     0     0    1

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

                规则:

                        相应位上的数字*权重,相加

                        0141  = 1*8^2 + 4*8^1 + 1*8^0 = 64+32+1 == 97

                例题:实现下面数据进制之间的转换

                        计算 255的二进制 八进制 16进制     0b11111111   0377   0xff

                        计算0x101的十进制   257

                        计算0171的十进制    121

                        计算0b10110001的十进制   177

           

        c、十进制快速转二进制

                加法:靠近小的权重, > 小的权重

                31  --- 32 16 8  4  2 1

                                √  √   √  √ √

                               1  1  1  1 1

   

                51 --- 64 32 16 8  4  2 1

                                √  √          √ √

                               1  1  0  0  1 1

  

                减法:数值比较靠近大的权重, < 大的权重

                31  --- 32 16 8  4  2 1

                           1  0  0  0  0   0

                            0  1  1  1  1  1

                278:

                        512 256 128 64 32 16 8  4  2 1

                                  √                    √      √  √

                                  1    0   0  0     1  0  1  1 0

                500:

                        512 256 128 64 32 16 8  4  2 1

                            0   1    1     1  1    1  1  1  1 1 --- 511

                            0   1    1     1  1    1  0  1  0 0 --- 500

                常用的0~16必须会

                        0 --- 0000

                        1 --- 0001

                        2 --- 0010

                        3 --- 0011

                        4 --- 0100

                        5 --- 0101

                        6 --- 0110

                        7 --- 0111

                        8 --- 1000

                        9 --- 1001

                        10 --- 1010

                        11 --- 1011

                        12 --- 1100

                        13 --- 1101

                        14 --- 1110

                        15 --- 1111

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

                3位二进制 == 1位八进制   (4 2 1)

                4位二进制 == 1位十六进制  (8 4 2 1)

                十六进制和二进制转换

                0xaf6  ===  0b101011110110

                0b0000100101001010 == 0x094a

                八进制和二进制进行转换

                0345  ===  0b011100101

                0b000 000 100 101 001 010  === 0004512