# include <stdio.h>
int main()
{
int n, c, k;
printf("Enter an integer in decimal number system\n");
scanf("%d", &n);
printf("%d in binary number system is:\n", n);
for (c = 31; c >= 0; c--)
{
k = n >> c;
if (k & 1)
printf("1");
else
printf ("0");
}
printf("\n");
return 0;
}
有人可以帮我理解这段代码的工作原理吗?我在an online site找到了这个。输入小数时,它给出数字的二进制对应项。但我不明白它是如何工作的。而且n>>c
符号的含义是什么?对不起,如果这太傻了,我只是C
的初学者。如果可以,请你帮助我。非常感谢。
答案 0 :(得分:1)
我们声明一些整数,以便稍后在程序中使用。
int n, c, k;
我们从用户那里得到一个输入号码。 printf()
会将字符串打印到屏幕上,scanf()
会向用户请求数据并将其存储在n
中。
printf("Enter an integer in decimal number system\n");
scanf("%d", &n);
我们现在向用户打印n
printf("%d in binary number system is:\n", n);
这是for循环。它有三个部分。第一部分在我们进入循环之前运行,但仅在循环的第一次迭代时运行。所以我们将c
设置为31.然后,我们检查条件。是c >= 0
吗?是。它是。
我们现在可以忽略最后一部分。
for (c = 31; c >= 0; c--)
{
这会将k
的值n
转移到右c
次。这类似于将数字除以2然后删除任何小数。所以5 >> 2 == 1
。并7 >> 1 == 3
。许多计算器程序也有这个按钮。
这次迭代,无论用户输入是什么,我们都有n
(比方说52)。并且c
是31.所以这个循环的值为0。
k = n >> c;
现在,此测试用作偶数或奇数测试。如果是奇数,我们会打印1
和0
。这也可以看作是查看数字的最低位并选择它是1还是0。
if (k & 1)
printf("1");
else
printf ("0");
我们现在完成了这段代码,然后我们回到for循环。现在,在以下迭代中,我们将执行第三个代码块(--c
)。所以c == 30
。然后,我们将运行中间部分,并验证我们是否仍满足执行此循环的条件。
}
我想这个节目的其余部分并不有趣。
printf("\n");
return 0;
}
因此,此代码作为一个整体尝试打印数字的二进制表示。它假设了一些东西,包括数字适合整数,系统的整数是32位。
更一般地说,在for循环的每个循环中,我们抓住了我们尚未看到的数字的最后一位,如果该位为高,则打印1
。
如果您还不知道二进制表示法,那么您需要了解这些代码才有意义。
答案 1 :(得分:1)
声明
k = n >> c;
右移n
到c
位。如果k & 1
的最后一位为if
,则1
中的k
表达式返回1
,否则返回0
。取n = 8
和c = 7
,请参阅示例(假设8位表示):
iteration print
--------- -----
1. k = 0000 1000 >> 7 = 0000 0000
0000 0000 & 0000 0001 = 0000 0000 = 0 ==> 0
2. k = 0000 1000 >> 6 = 0000 0000
0000 0000 & 0000 0001 = 0000 0000 = 0 ==> 0
3. k = 0000 1000 >> 5 = 0000 0000
0000 0000 & 0000 0001 = 0000 0000 = 0 ==> 0
4. k = 0000 1000 >> 4 = 0000 0000
0000 0000 & 0000 0001 = 0000 0000 = 0 ==> 0
5. k = 0000 1000 >> 3 = 0000 0001
0000 0001 & 0000 0001 = 0000 0000 = 0 ==> 1
. ..
. ..
8. k = 0000 1000 >> 0 = 0000 0000
0000 0000 & 0000 0001 = 0000 0000 = 0 ==> 0