1.概述
在计算机编程中,二进制是一种经常用到的数制。在C语言中,我们经常需要将二进制数转换为十进制数。本文主要介绍如何将C语言中的二进制数转换为十进制数。
在C语言中,我们可以通过移位运算和位运算来操作二进制数。移位运算指将数值的所有二进制位向左或向右移动指定的位数,位运算则是对二进制数进行逐位的操作,包括与、或和异或等运算。这些运算为我们进行二进制数转换提供了基础。
2.二进制转十进制的基本方法
在介绍C语言中的二进制转换方法之前,我们首先要了解二进制转换的基本方法。
2.1 以8位二进制数为例
假设有一个8位的二进制数:11001010,我们要将它转换为十进制数。过程如下:
首先,我们需要知道各位的权重。在十进制中,最右边的数字的权重为1,向左依次递增1位,直至最高位。因此,一个8位的二进制数的各位权重依次为:
2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
128 64 32 16 8 4 2 1
其次,我们需要将二进制数的各位与对应的权重相乘,然后相加,这样我们就可以得到十进制数的值。以11001010为例:
1 1 0 0 1 0 1 0
× 128 64 32 16 8 4 2 1
————————————————
128 64 8 2 ← 相加
————————————————
202
最终结果为202,因此11001010的十进制表示为202。
2.2 C语言中的二进制转十进制方法
C语言提供了一个函数,strtoul(),可以将字符串(包括二进制)转换为无符号长整型。该函数可以根据传入的第2个参数来指定输入的字符串是什么进制的,如下所示:
unsigned long int strtoul(const char* str, char** endptr, int base);
其中,base表示指定的进制数,比如base为2,就表示输入的二进制字符串会被转换为十进制数。str为待转换的字符串,endptr为指向待转换字符串中未转换部分的指针。调用该函数后,未转换部分指向的字符串中的内容会被赋值给endptr所指的字符串。
以下代码展示了如何使用该函数将一个八位二进制数转换为十进制数:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* endptr;
char* bin_str = "11001010";
unsigned long int dec_num = strtoul(bin_str, &endptr, 2); //base为2
printf("The decimal equivalent of %s is %lu\n", bin_str, dec_num);
return 0;
}
运行结果为:
The decimal equivalent of 11001010 is 202
3.自己实现二进制转十进制的方法
我们也可以手动完成二进制转换,而不是使用C语言的strtoul函数。主要思路是根据基本方法所述,将二进制数的各位与权重相乘再相加。具体实现如下:
#include <stdio.h>
#include <math.h>
int main()
{
int bin_num = 11001010; //二进制数
int dec_num = 0; //十进制数
int cnt = 0; //各位的权重(即2的幂次方)
while (bin_num != 0)
{
dec_num += (bin_num % 10) * pow(2, cnt); //计算该位的值并累加
bin_num /= 10; //将二进制数右移(即除以10)
++cnt; //权重递增
}
printf("The decimal equivalent of 11001010 is %d\n", dec_num);
return 0;
}
运行结果为:
The decimal equivalent of 11001010 is 202
4.十进制转二进制的方法
除了将二进制数转换为十进制数,我们也可以将十进制数转换为二进制数。方法是将十进制数不断除以2,直到商为0,然后将所得到的余数倒序排列即为该十进制数的二进制表示。例如,202(十进制数)的二进制表示为11001010。
#include <stdio.h>
int main()
{
int dec_num = 202;
int bin_num = 0;
int cnt = 0;
while (dec_num != 0)
{
bin_num += (dec_num % 2) * pow(10, cnt); //计算该位的二进制值并累加
dec_num /= 2; //将十进制数右移(即除以2)
++cnt; //权重递增
}
printf("The binary equivalent of 202 is %d\n", bin_num);
return 0;
}
运行结果为:
The binary equivalent of 202 is 11001010
5.总结
二进制数在计算机编程中经常被使用,而将二进制数转换为十进制数是一个基本操作,也是编程实践中常用的操作之一。上述内容介绍了通过C语言中的函数strtoul()实现二进制转换的方法,以及手动实现二进制转换的方法。此外,也介绍了如何将十进制数转换为二进制数。在日常编程中,熟练掌握二进制与十进制之间的转换是非常必要的。