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);
}