c拼图(如果声明)

前端之家收集整理的这篇文章主要介绍了c拼图(如果声明)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
什么是数据(数字),如果以下语句中的所需输出是:令人惊讶?
main()
{
 int data;
 if(data!=0 && data==-data)
 {
  printf("AMAZING");
 }
}

解决方法

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

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

结果:

AMAZING

正如理查德彭宁顿正确指出的那样,这是有效的,因为two’s complement表示负数.最大可表示正数的绝对值小于最大负数,因此如果您尝试否定最大负数,则溢出int并回绕,返回相同的数字.

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

原文链接:/c/117018.html

猜你在找的C&C++相关文章