C语言学习 --- 进制转换

进制数:

二进制 八进制 十进制 十六进制

十进制:        逢10进1,每一位上的数字是0 ~ 9

二进制:        逢2进1,每一位上的数字是0、1

八进制:        逢8进1,每一位上的数字是0 ~ 7

十六进制:    逢16进1,每一位上数字0 ~ 9 a b c d e f

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

十进制:不用加前缀,默认就是十进制

二进制: 0b或者0B 0b1010

八进制: 0 0121

十六进制:0x或者0X 0xa3

不同进制数有不同的输入和输出

格式控制符

short

int

long

long long

十进制

%hd

%d

%ld

%lld

八进制

%ho

%o

%lo

%llo

十六进制

%hx

%x

%lx

%llx

二进制没有格式控制符

//定义一个变量,输入一个十六进制数,输出它对应的十进制的数据。
#include <stdio.h>

int main(void)
{
    int a;
    scanf("%x",&a);
    
    printf("%d",a);
    return 0;
}
//定义一个变量,输入一个字符,输出这个字符对应的ASCII码值,以及这个数值的八进制、十六进制形式。
#include <stdio.h>

int main(void)
{
    char a;
    scanf("%c",&a);
    
    printf("这个字符的ASCII码值为:%d\n",a);
    printf("这个字符的八进制为:%#o\n",a);
    printf("这个字符的十六进制为:%#x\n",a);
    return 0;
}
//在输出的%后加#是为了规范进制格式。

进制转换

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

        规则:

                十进制的数 除以 要转换的进制,得到商后继续 除以 要转的进制,知道商为0,然后每一轮的余数逆序排列

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

        规则:

                通过权重来计算(以下用例子说明)

        十进制:

                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

        二进制:

        0b         1                 1                 0                 1

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

                计算可得:1*2^3+1*2^2+0*2^1=13

        八进制:

          0         1                 4                 1

                   8^2             8^1              8^0

                 计算可得: 1*8^2+4*8^1+1*8^0=97

十六进制:

        0x         6                 1

                  16^1            16^0

                计算可得:6*16^1+1*16^0=97

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

规则:

1位八进制 == 3位二进制(421)                 若是二进制转八进制则划分三位后编码

        如        0243 ==》 0b010100011

        如        0b | 001 | 111 | 101 | 100  ==》0 1754

1位十六进制 == 4位二进制(8421)             若是二进制转十六进制则划分四位后编码

        如        0x3af ==》0b001110101111

        如        0b | 0001 | 1111 | 1101 | 1100 ==》0x1fdc

16进制数:

0x0 ~ 0b00000000

0x1 ~ 0b00000001

0x2 ~ 0b00000010

0x3 ~ 0b00000011

0x4 ~ 0b00000100

0x5 ~ 0b00000101

0x6 ~ 0b00000110

0x7 ~ 0b00000111

0x8 ~ 0b00001000

0x9 ~ 0b00001001

0xa ~ 0x00001010

0xb ~ 0x00001011

0xc ~ 0x00001100

0xd ~ 0x00001101

0xe ~ 0x00001110

0xf ~ 0x00001111

8进制数: 0 ~ 7

00 ~ 000

01 ~ 001

02 ~ 010

03 ~ 011

04 ~ 100

05 ~ 101

06 ~ 110

07 ~ 111

十进制和二进制之间的快速转换

规则:

        将所有的二进制权重罗列出来,然后勾选 + -

例子:

2024 --- 2进制 0 1

2048         1024         512         256         128         64         32         16         8         4         2         1

   0               1              1             1              1            1           1           1         1         1         1         1 

   0               1              1             1              1            1           1           0         1         0         0         0 --- 2024

1500 --- 2进制

2048         1024         512         256         128         64         32         16         8         4         2         1

   √                                              √             √            √                         √         √         √

   1                0             0             1             1              1           0           1         1        1         0        0

1024+256+128+64+16+8+4=1500

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

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

1个字节存储8位二进制

1个字节可以存储2个十六进制数据

例子:

int a = 0x12345678

以上是由于int共可开辟4个字节内存,而一个字节可以存储两个十六进制数据,则如上存储。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值