分部和NSUInteger

时间:2009-03-14 17:11:14

标签: objective-c cocoa cocoa-touch nsuinteger

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

row = (stagePosition - col) / PHNumRow;

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

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

如果除数未签名或签名,为什么重要? 我没有把结果放在unsigned int中。

1 个答案:

答案 0 :(得分:4)

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

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

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