#include <stdio.h> int main() { unsigned int num; printf("请输入一个无符号整数: "); scanf("%u", &num); // 将十进制数转换为二进制字符串 char a[33]; // 最多需要 32 位加上 '\0' int i, j; for (i = 31; i >= 0; i--) { a[i] = (num & 1) + '0'; // 当前位是 1 还是 0 就加上相应的字符 '1' 或 '0' num >>= 1; // 去掉已处理的最低位 } a[32] = '\0'; // 字符串结尾要添加 '\0' // 去掉二进制字符串开头的无用零 for (i = 0; i < 32 && a[i] == '0'; i++); if (i == 32) // 全是零 i--; for (j = 0; i < 32; i++, j++) a[j] = a[i]; a[j] = '\0'; // 将十进制数转换为八进制字符串 char b[12]; sprintf(b, "%o", num); // 输出结果 printf("该数的二进制表示为: %s\n", a); printf("该数的八进制表示为: %s\n", b); return 0; }
时间: 2023-06-25 21:08:20 浏览: 83
详解C语言中的char数据类型及其与int类型的转换
这是一个将输入的无符号整数转换为二进制和八进制字符串输出的 C 语言程序。程序的实现过程如下:
1. 首先通过 scanf 函数从标准输入中读入一个无符号整数 num。
2. 然后将 num 转换为二进制字符串 a。程序使用了一个 char 类型的数组 a 来存储二进制字符串,数组长度为 33,其中最后一位是字符串结尾的 '\0'。
3. 转换过程中,先从最高位到最低位依次处理每一位,使用按位与运算符 & 取出当前位的值(0 或 1),并根据取出的值加上相应的字符 '0' 或 '1'。然后将 num 向右移动一位,去掉已处理的最低位。
4. 转换完毕后,需要去掉二进制字符串开头的无用零。程序使用了一个循环来找到第一个不为零的位置 i,然后将 a[i] 到 a[31] 移动到数组的前面,即将 a[i] 赋值给 a[0],a[i+1] 赋值给 a[1],以此类推。最后在字符串末尾添加 '\0'。
5. 接着,将 num 转换为八进制字符串 b,使用了 sprintf 函数实现。
6. 最后,将转换结果输出到标准输出中,包括二进制字符串和八进制字符串。
需要注意的是,程序中使用了无符号整数、按位与运算符、位移运算符和 sprintf 函数等 C 语言特性。如果输入的整数超出了无符号整数能表示的范围,程序可能会出错。
阅读全文