#include <stdio.h>
int main() {
int i = 1;
int j = -1;
while(i)
i++;
while(-j)
j--;
i = i-1;
j = j+1;
printf("%d %d\n",i,j);
}
我想知道int的范围!这段代码无法得到正确的答案!但它可以!
#include <stdio.h>
int main() {
int i = 1;
int j = -1;
while(i > 0)
i++;
while(j < 0)
j--;
i = i-1;
j = j+1;
printf("%d %d\n",i,j);
}
我不知道它们之间有什么区别!
答案 0 :(得分:5)
这两个代码示例都依赖于未定义的行为来确定int的最大值。未对像int
等签名号码定义溢出。
要查找int的最大值,只需读取值INT_MAX
。
如果您真的想以便携方式计算INT_MAX
的值,那么您应该查看以下答案:Is there a portable way to define INT_MAX?
答案 1 :(得分:4)
从标准C库中尝试limits.h
。它包含两个常量定义INT_MIN
和INT_MAX
,分别告诉您int
的最小值和最大值。
#include <limits.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
printf("int min: %d, int max: %d\n", INT_MIN, INT_MAX);
return 0;
}
答案 2 :(得分:3)
您想了解int
的范围?
#include <stdio.h>
#include <limits.h>
int main()
{
printf("%d, %d\n", INT_MIN, INT_MAX);
return 0;
}
节目输出
-2147483648, 2147483647
根据@ iharob的回答,这是一个类似的解决方案,在没有UB的情况下达到极限。
#include <stdio.h>
int main()
{
int integer = -1, max = 0;
while (integer <<= 1)
max = (max << 1) | 1;
printf("%d\n", max);
return 0;
}
最后,niftier解决方案(没有循环)将是
printf("Max int %d\n", (unsigned)-1 >> 1);
答案 3 :(得分:1)
如果您确实想要计算该值,可以使用此
int
main(int arcg, char **argv)
{
int integer;
int i;
integer = 0;
for (i = 0 ; i < 8 * sizeof (integer) - 1 ; i++)
{
integer |= (1 << i);
}
return 0;
}
然后最大值为integer
,最小值为-integer