#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 16:08:20 浏览: 50
这是一个将输入的无符号整数转换为二进制和八进制字符串输出的 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 语言特性。如果输入的整数超出了无符号整数能表示的范围,程序可能会出错。
相关问题
scanf输入无符号整数
scanf函数是C语言中用于从标准输入流中读取数据的函数之一。要输入无符号整数,可以使用"%u"格式控制符。下面是一个示例代码:
```c
#include <stdio.h>
int main() {
unsigned int num;
printf("请输入一个无符号整数:");
scanf("%u", &num);
printf("您输入的无符号整数是:%u\n", num);
return 0;
}
```
在上面的代码中,我们声明了一个无符号整数变量`num`,然后使用`scanf`函数以"%u"格式控制符读取用户输入的无符号整数,并将其存储到`num`变量中。最后,我们使用`printf`函数将输入的无符号整数打印出来。
将输入的一个无符号整数的第i位置0 或置1
以下是将输入的一个无符号整数的第i位置0或置1的代码示例:
```c
#include <stdio.h>
unsigned int set_bit(unsigned int num, int i, int bit) {
if (bit) {
num |= (1 << i); // 将第i位设置为1
} else {
num &= ~(1 << i); // 将第i位设置为0
}
return num;
}
int main() {
unsigned int num;
int i, bit;
printf("请输入一个无符号整数:");
scanf("%u", &num);
printf("请输入要设置的位数i:");
scanf("%d", &i);
printf("请输入要设置的值(0或1):");
scanf("%d", &bit);
num = set_bit(num, i, bit);
printf("设置后的结果为:%u\n", num);
return 0;
}
```
当输入一个无符号整数、要设置的位数i以及要设置的值(0或1)后,该程序会将第i位设置为0或1,并输出设置后的结果。
注意:该程序没有进行输入合法性检查,实际使用时需要加上相应的检查。