
枫叶飘零为您分享以下优质知识
在C语言中,二进制转换可以通过多种方法实现,具体取决于转换方向(如二进制转十进制、十进制转二进制)和输入输出形式(如整数或字符串)。以下是常见的转换方法及示例代码:
一、二进制转十进制
使用按权相加法,从右往左遍历二进制位,每位数值乘以2的幂次后求和。
```c
// 通过循环实现
int binaryToDecimal(int n) {
int decimal = 0;
for (int i = 0; i < 32; i++) { // 假设32位整数
decimal += (n & 1) * (1 >
= 1;
}
return decimal;
}
// 递归实现
int fun(int n) {
if (n == 0) return 0;
return fun(n / 2) + (n & 1);
}
```
二进制字符串转十进制
遍历字符串,将每位字符转换为数字后按权相加。
```c
int binaryToDecimal(char *binary) {
int decimal = 0;
for (int i = 0; i < strlen(binary); i++) {
int bit = binary[i] - '0';
decimal = decimal * 2 + bit;
}
return decimal;
}
```
二、十进制转二进制
整数十进制转二进制
使用除2取余法,将余数倒序排列。
```c
void decimalToBinary(int n) {
if (n == 0) return;
int binaryArr = {0};
for (int i = 0; i < 32; i++) {
binaryArr[i] = n % 2;
n /= 2;
}
for (int i = 31; i >
= 0; i--) {
printf("%d", binaryArr[i]);
}
}
```
浮点数十进制转二进制
可使用`printf`的格式化输出功能直接显示。
三、其他进制转换
进制通用转换
- 八进制转十进制:
使用`atoi`函数直接转换(如`atoi("73627")`)。
- 十六进制转十进制:使用`atoi`函数(如`atoi("1A3F")`)。
综合示例
下面是一个综合程序,支持二进制与十进制之间的相互转换:
```c
include
include
include
// 二进制转十进制(整数)
int binaryToDecimal(int n) {
int decimal = 0;
for (int i = 0; i < 32; i++) {
decimal += (n & 1) * (1 >
= 1;
}
return decimal;
}
// 十进制转二进制
void decimalToBinary(int n) {
if (n == 0) return;
int binaryArr = {0};
for (int i = 0; i < 32; i++) {
binaryArr[i] = n % 2;
n /= 2;
}
for (int i = 31; i >
= 0; i--) {
printf("%d", binaryArr[i]);
}
}
int main() {
char binary;
int decimal;
printf("输入一个二进制数: ");
scanf("%s", binary);
decimal = atoi(binary);
printf("对应的十进制数为: %dn", decimal);
printf("输入一个十进制数: ");
scanf("%d", &decimal);
printf("对应的二进制数为: ");
decimalToBinary(decimal);
printf("n");
return 0;
}
```
注意事项
以上示例假设输入为32位整数,实际应用中可根据需求调整位数。
对于浮点数或长整型,建议使用`long long`类型并修改转换逻辑。
进制转换时需