Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c拼图(if语句)_C - Fatal编程技术网

c拼图(if语句)

c拼图(if语句),c,C,如果以下语句所需的输出为:惊人,那么数据(数字)是什么 main() { int data; if(data!=0 && data==-data) { printf("AMAZING"); } } 它必须是一个整数的最小值,即0x8000000(如果是32位),因为这是唯一一个在求反时保持不变的数字,而不是零 #include <stdio.h> main() { int data = 0x80000000; if(data!=0 &&am

如果以下语句所需的输出为:惊人,那么数据(数字)是什么

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

它必须是一个整数的最小值,即0x8000000(如果是32位),因为这是唯一一个在求反时保持不变的数字,而不是零

#include <stdio.h>

main()
{
 int data = 0x80000000;
 if(data!=0 && data==-data)
 {
  printf("AMAZING");
 }
}
正如Richard Pennington正确指出的那样,这之所以有效,是因为它代表了负数。可表示的最大正数的绝对值比最大负数的绝对值小一个,因此,如果尝试对最大负数求反,它将溢出一个int并环绕,返回相同的数


对于使用的计算机,每个可表示数字的负值也可以在没有溢出的情况下表示,因此此难题没有解决方案。

它取决于整数的大小和整数的实现方式,但在具有2字节整数的二补机器上,答案是-32768。

我不知道我的机器中int的大小。所以我用一个程序来求int的最大值,比如

void main()
{
   int i;
   do{
       }while(i>i++);
   printf ("data=%d",i);
}
我找到了I=-2147483648的最大值


将此数据分配给将起作用的数据

请参阅@aaronls——漂亮的链接,但这与问题有什么关系?结果未定义,令人惊讶的是,在调整36位整数(0x80000000)后,我在我的UNIVAC 1100上尝试了这一点,但它不起作用@Richard,根据UNIVAC的维基百科:数字是二进制的,补码中有负值。所以这行不通!马克:我知道。技巧注释。;-)@Richard,虽然输入很好,但我在我的评论中添加了更多的解释,解释了它为什么会起作用以及何时起作用。我喜欢这样一个想法:一个SO用户冲到他们30年前的主机上尝试一些东西。你打印的是地址(
&I
),而不是值(
I
)我在Windows 32 XP机器上的Windows上对Borland C++ 5.5.1进行测试。现在我明白了我的错误,我真的很抱歉发布这个,这是我自己犯的一个大错误:(谢谢finnw:现在我纠正了我的错误,并且能够通过我自己的方法取得结果。嗯,人们什么时候才能学会(并实施)
main
总是向操作系统返回一个
int
。如果假设字符位为8,那么就是这样。
void main()
{
   int i;
   do{
       }while(i>i++);
   printf ("data=%d",i);
}