我正在参与K&R的2-1题练习,目标是计算不同变量类型的范围。以下是我用来计算short int
最大可包含值的函数:
short int max_short(void) {
short int i = 1, j = 0, k = 0;
while (i > k) {
k = i;
if (((short int)2 * i) > (short int)0)
i *= 2;
else {
j = i;
while (i + j <= (short int)0)
j /= 2;
i += j;
}
}
return i;
}
我的问题是,这个函数返回的值是
-32768
,显然是错误的,因为我期望得到一个正数。我无法找出问题所在,我使用了相同的函数(更改了变量类型)来计算int可以包含的最大值,它有效了...我认为问题可能是在
if
和while
语句中的比较引起的,因此进行了类型转换,但这并没有帮助...有什么想法是什么原因导致这个问题吗?提前感谢!
编辑:感谢Antti Haapala的解释,向符号位溢出会导致未定义行为,而不是负值。