c拼图(如果声明)

时间:2010-02-05 12:44:59

标签: c

什么是数据(数字),如果以下语句中的所需输出是:AMAZING?

main()
{
 int data;
 if(data!=0 && data==-data)
 {
  printf("AMAZING");
 }
}

3 个答案:

答案 0 :(得分:12)

它必须是整数的最小值,即如果它是32位则为0x80000000,因为这是除了零之外唯一的数字,在否定时保持不变。

#include <stdio.h>

main()
{
 int data = 0x80000000;
 if(data!=0 && data==-data)
 {
  printf("AMAZING");
 }
}

结果:

AMAZING

正如理查德·彭宁顿正确指出的那样,这是有效的,因为负数的two's complement表示。最大可表示正数的绝对值小于最大负数,因此如果你试图否定最大负数,它会溢出一个int并回绕,返回相同的数字。

对于使用one's complement的计算机,每个可表示数字的负值也可以无溢出地表示,因此这个难题没有解决方案。

答案 1 :(得分:7)

它取决于整数的大小以及如何实现整数,但在具有2字节整数的二进制补码机器上,答案是-32768。

答案 2 :(得分:0)

我不知道我的机器中int的大小。所以我使用程序来找到int的最大值,如

void main()
{
   int i;
   do{
       }while(i>i++);
   printf ("data=%d",i);
}

我发现i = -2147483648的最大值

将此分配给可行的数据..