我写了一个将整数十进制数转换为二进制数的代码。 我试图使其打印所有的数字,直到给出的数字,而不是每次打印完全相同的数字。 例如,对于输入= 3,它将以二进制形式打印0、1、2、3。 这是我的代码:
printf("Please enter an integer number\n");
scanf_s("%d", &n);
for (i = 0; i < n; i++)
{
printf("%d == ", n);
for (c = 5; c >= 0; c--)
{
k = n >> c;
if (k & 1)
printf("1");
else
printf("0");
}
printf("\n");
}
system ("pause");
return 0;
谢谢大家!
答案 0 :(得分:1)
您需要在循环中使用i,而不是n
#include "stdio.h"
int main()
{
int c,k,n,i = 0;
printf("Please enter an integer number\n");
scanf_s("%d", &n);
for (i = 0; i < n; i++)
{
printf("%d == ", i);
for (c = 5; c >= 0; c--)
{
k = i >> c;
if (k & 1)
printf("1");
else
printf("0");
}
printf("\n");
}
return 0;
}
答案 1 :(得分:1)
您也可以简单地使用putchar()
输出单个字符,而无需调用可变参数printf
在格式字符串中输出固定字符(尽管好的编译器可能会为您进行优化
您可以执行以下操作:
#include <stdio.h>
#include <limits.h>
int main (void) {
unsigned n;
fputs ("enter an integer number: ", stdout);
if (scanf ("%u", &n) == 1) {
for (unsigned i = 0; i < n; i++) {
printf ("%d == ", i);
for (unsigned s = 0; s < sizeof s * CHAR_BIT; s++)
putchar ((i >> (31 - s)) & 1u ? '1' : '0');
putchar ('\n');
}
}
}
使用/输出示例
$ ./bin/binslessthann
enter an integer number: 10
0 == 00000000000000000000000000000000
1 == 00000000000000000000000000000001
2 == 00000000000000000000000000000010
3 == 00000000000000000000000000000011
4 == 00000000000000000000000000000100
5 == 00000000000000000000000000000101
6 == 00000000000000000000000000000110
7 == 00000000000000000000000000000111
8 == 00000000000000000000000000001000
9 == 00000000000000000000000000001001
(当然,对于小数字来说,不需要完整的32位,但是出于完整性考虑,将它们包括在内)
未填充的二进制表示形式
如评论中所述,未填充版本使结果更易于阅读。 (引号是“可怕的前导零”)要输出未填充的版本,您可以首先简单地检查该值是否为零,如果这样简单地输出零,则对于存在一个位的值,请检查该值中是否还剩下一个位移位后,如果是这样,请继续输出位,否则不要再输出任何内容,例如
int main (void) {
unsigned n;
fputs ("enter an integer number: ", stdout);
if (scanf ("%u", &n) == 1) {
for (unsigned i = 0; i < n; i++) {
printf ("%d == ", i);
if (!i)
putchar ('0');
else {
unsigned s = sizeof s * CHAR_BIT;
while (s--) {
unsigned remain = i >> s;
if (remain)
putchar ((i >> s) & 1u ? '1' : '0');
}
}
putchar ('\n');
}
}
}
使用/输出示例
$ ./bin/binslessthanrem
enter an integer number: 10
0 == 0
1 == 1
2 == 10
3 == 11
4 == 100
5 == 101
6 == 110
7 == 111
8 == 1000
9 == 1001
仔细检查一下,如果还有其他问题,请告诉我。