【问题标题】:Division and NSUInteger除法和 NSUInteger
【发布时间】:2009-03-14 17:11:14
【问题描述】:

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

row = (stagePosition - col) / PHNumRow;

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

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

除数是无符号还是有符号为什么重要? 我没有将结果放入 unsigned int 中。

【问题讨论】:

    标签: objective-c cocoa cocoa-touch nsuinteger


    【解决方案1】:

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

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

    因为stagePosition 是负数,所以有一个回绕,你的计算就会蓬勃发展!

    【讨论】:

    • 谢谢。我想这样不加区别地使用 unsigned 不是一个好主意。
    猜你喜欢
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多