什么是数据(数字),如果以下语句中的所需输出是:AMAZING?
main()
{
int data;
if(data!=0 && data==-data)
{
printf("AMAZING");
}
}
答案 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的最大值
将此分配给可行的数据..