理解C中的程序

时间:2014-08-27 13:35:40

标签: c binary

# 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的初学者。如果可以,请你帮助我。非常感谢。

2 个答案:

答案 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;

现在,此测试用作偶数或奇数测试。如果是奇数,我们会打印10。这也可以看作是查看数字的最低位并选择它是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;  

右移nc位。如果k & 1的最后一位为if,则1中的k表达式返回1,否则返回0。取n = 8c = 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