进制的概念以及进制转换和计算

文章目录

1. 进制

十六进制(Hexadecimal)

十进制(Decimal)

八进制(Octal)

二进制(Binary)

示例

2. 进制转换表

3. 十六进制与二进制转换

4. 十进制与二进制的转换

5. 十进制与十六进制的转换

6. 在C语言中表示进制


1. 进制

计算机对数据的表示方式有多种进制,包括十六进制、十进制、八进制和二进制。

十六进制(Hexadecimal)
  • 表示形式:0xA 或 AH
  • 进制系统:逢十六进一
  • 组成:每一位由0到F组成,分别表示0到15的数值
  • 习惯用0x前缀表示或用H后缀表示
十进制(Decimal)
  • 表示形式:10 或 10D
  • 进制系统:逢十进一
  • 组成:每一位由0到9组成
  • 前缀无特殊表示方式,或用D后缀表示
八进制(Octal)
  • 表示形式:012 或 120
  • 进制系统:逢八进一
  • 组成:每一位由0到7组成
  • 习惯用0前缀表示,或用O后缀表示(注意:数字零0或字母O)
二进制(Binary)
  • 表示形式:0b1010 或 1010B
  • 进制系统:逢二进一
  • 组成:每一位由0或1组成
  • 习惯用0b前缀表示或用B后缀表示

示例

十六进制:0xA 或 AH

  • 0xA 表示十进制的10。
  • 0xF 表示十进制的15。

十进制:10 或 10D

  • 10 表示十进制的10。
  • 15D 表示十进制的15。

八进制:012 或 120

  • 012 表示十进制的10。
  • 017 表示十进制的15。

二进制:0b1010 或 1010B

  • 0b1010 表示十进制的10。
  • 0b1111 表示十进制的15。

2. 进制转换表

以下是一个进制转换表,展示了二进制、八进制、十进制和十六进制之间的转换关系。

二进制 (Binary)八进制 (Octal)十进制 (Decimal)十六进制 (Hexadecimal)
0000000
0001111
0010222
0011333
0100444
0101555
0110666
0111777
10001088
10011199
10101210A
10111311B
11001412C
11011513D
11101614E
11111715F

3. 十六进制与二进制转换

在嵌入式开发中,经常需要对十六进制与二进制进行转换。

二进制转换为十六进制

步骤:

  1. 将二进制数从右到左每四位分成一组。
  2. 每组二进制数转换为对应的十六进制数。

示例: 将二进制数 0b01101110101 转换为十六进制数。

  1. 从右到左每四位分组:

    011 0111 0101
  2. 补全不足的四位(在左边补0):

    0011 0111 0101
    
  3. 转换每组二进制数为十六进制:

    0011 -> 3
    0111 -> 7
    0101 -> 5
    

    最终得到十六进制数为 0x375

十六进制转换为二进制

步骤:将十六进制数从右到左每位转换为对应的四位二进制数。

示例: 将十六进制数 0xABC1 转换为二进制数。

1. 从右到左每位十六进制数转换为四位二进制数:

A -> 1010
B -> 1011
C -> 1100
1 -> 0001

2. 拼接所有二进制数:

1010 1011 1100 0001

 

4. 十进制与二进制的转换

十进制转换为二进制

步骤:

  1. 使用除2取余法,直到商为0。
  2. 将余数逆序排列。

示例: 将十进制数 45 转换为二进制数。

  1. 56 ÷ 2 = 28 余 0
  2. 28 ÷ 2 = 14 余 0
  3. 14 ÷ 2 = 7 余 0
  4. 7 ÷ 2 = 3 余 1
  5. 3 ÷ 2 = 1 余 1
  6. 1 ÷ 2 = 0 余 1

将余数逆序排列,得到:111000

二进制转换为十进制

步骤:将二进制数从右到左,按位展开,每位乘以对应的2的幂次方,然后求和。

示例: 将二进制数 101101 转换为十进制数。

从右到左计算:

  1. 最右边的0,对应的是 0× 2^0 = 0
  2. 倒数第二位0,对应的是 0× 2^1 = 0
  3. 倒数第三位0,对应的是 0× 2^2 = 0
  4. 倒数第四位1,对应的是 1× 2^3 = 8
  5. 倒数第五位1,对应的是 1× 2^4 = 16
  6. 最左边的1,对应的是 1× 2^5 = 32

将这些结果相加: 0+0+0+8+16+32=56

因此,二进制数 111000 转换回十进制数是 56

5. 十进制与十六进制的转换

十进制转换为十六进制

步骤:

  1. 使用除16取余法,直到商为0。
  2. 将余数逆序排列。

示例: 将十进制数 175 转换为十六进制数。

  1. 175 ÷ 16 = 10 余 15 (F)
  2. 10 ÷ 16 = 0 余 10 (A)

逆序排列余数:AF

结果:175 的十六进制表示为 0xAF

十六进制转换为十进制

步骤:将十六进制数从右到左,按位展开,每位乘以对应的16的幂次方,然后求和。

示例: 将十六进制数 0xAF 转换为十进制数。

  1. A× 16^1 + F×16^0
  2. 10×16+15×1
  3. 160+15=175

结果:0xAF 的十进制表示为 175

6. 在C语言中表示进制

十进制表示

十进制是默认的数字表示方式。在C语言中,直接写出数字就是十进制。

int decimal = 56;
printf("%d\n", decimal);  // 输出:56

二进制表示

C语言标准没有直接提供二进制文字表示的方法,但可以通过一些方式实现,比如宏定义或使用标准库。

#include <stdio.h>

// 宏定义二进制常量
#define BIN(x) 0b##x

int main() {
    int binary = BIN(111000);
    printf("%d\n", binary);  // 输出:56
    return 0;
}

八进制表示

八进制数字以 0 开头。在C语言中,前缀 0 表示八进制数。

int octal = 070;
printf("%o\n", octal);  // 输出:70
printf("%d\n", octal);  // 输出:56

十六进制表示

十六进制数字以 0x0X 开头。在C语言中,前缀 0x 表示十六进制数。

int hex = 0x38;
printf("%x\n", hex);  // 输出:38
printf("%d\n", hex);  // 输出:56

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TENET-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值