本篇以C语言中常用的数值: 二进制、八进制、十进制、十六进制,来说明进制之间是如何转换的
进制就是用来表示数值的方法,一个数值可以用多种进制表示
文章目录
一、 其他进制转换为十进制
对于一个 X 进制的数,每一位的数字只能为 0 ~ X - 1,每一位都是存在权重的,其权重的基数就是 X
将对应位的数字乘以权重,然后相加,即为该进制数转化的十进制数
二、 其他进制转换为二进制
在可以解释问题的前提下,为了避免产生不必要的麻烦,这里采用无符号整形
//打印二进制位,只适用于非负整数
void print_bit(unsigned int n)
{
if (n != 0)
{
print_bit(n >> 1);
printf("%d", n % 2);
}
}
#include <stdio.h>
int main()
{
//以 0 开头表示八进制数
unsigned int a = 037;
//十进制数
unsigned int b = 16;
//以 0x 开头表示十六进制数
unsigned int c = 0x2a;
print_bit(a);
printf("\n\n");
print_bit(b);
printf("\n\n");
print_bit(c);
printf("\n\n");
return 0;
}
对上述代码结果进行分析
1. 八进制转二进制
2. 十进制转二进制
3. 十六进制转二进制
三、 一些进制转换
- 二进制转八进制:
既然一个八进制位相当于三个二进制位,那么三个二进制位也相当于一个八进制位 - 二进制转十六进制:
既然一个十六进制位相当于四个二进制位,那么四个二进制位也相当于一个十六进制位 - 十进制转其他制:
只需要将公式:X = (X / Y)* Y + X % Y 中 Y 换成需要转换的进制即可,其他步骤与十进制转二进制类似
四:补充
1. 十进制整数部分转换二进制(短除法)及 十进制小数部分转换二进制
十进制转换为 R 进制整除 R 倒取余即可