0

我有一些涉及负值的计算:

row = (stagePosition - col) / PHNumRow;

假设 stagePosition 为 -7,col 为 1。它们都是 NSInteger,包括行。PHNumRow 为 8。

如果 PHNumRow 是 NSInteger,我会得到我期望的结果:-1。但是如果 PHNumRow 是 NSUInteger,结果就是垃圾。

除数是未签名还是已签名为什么重要?我没有将结果放入无符号整数中。

4

1 回答 1

4

因为整数提升。当评估右侧时,所有参数都被提升为表达式操作数的最高类型,如果PHNumRow是无符号的,则将是无符号整数。编译器执行类似于以下的操作:

((NSUInteger)stagePosition - (NSUInteger)col) / PHNumRow;

因为,stagePosition是负数,所以有一个环绕,你的计算就会繁荣!

于 2009-03-14T17:42:53.420 回答