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

文章目录

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)
0000 0 0 0
0001 1 1 1
0010 2 2 2
0011 3 3 3
0100 4 4 4
0101 5 5 5
0110 6 6 6
0111 7 7 7
1000 10 8 8
1001 11 9 9
1010 12 10 A
1011 13 11 B
1100 14 12 C
1101 15 13 D
1110 16 14 E
1111 17 15 F

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

猜你喜欢

转载自blog.csdn.net/TENET123/article/details/140254177