为什么UINT_MAX + 3总是等于2?

时间:2015-09-21 21:27:54

标签: c

有人可以帮助我,我写了一个小C程序来输出UINT_MAX + 3的值,并在mac和ubuntu上测试它,它一直给我2

谢谢

2 个答案:

答案 0 :(得分:4)

这是在C标准中定义的方式。无符号整数具有模运算。将任何类型的最大无符号整数递增1会导致0.递增2会产生1.依此类推。

出于同样的原因,从0减去1会得到无符号整数类型的最大值。

答案 1 :(得分:0)

如果您确实要向UINT_MAX添加3并获得更大的值,则需要使用比为编译器定义UINT_MAX的类型更大的整数类型。不幸的是,你这样做的方式取决于你的编译器。例如,在Windows上使用Visual C ++,int是32位,因此UINT_MAX是4,294,967,295。在Visual C ++中,使用类型__int64指定64位整数,因此编写:

unsigned __int64 n;
n=(unsigned __int64)UINT_MAX+3;
printf("%I64i\n",n);

...将打印所需的值,4,294,967,298。