我有一些涉及负值的计算:
row = (stagePosition - col) / PHNumRow;假设行是-7,stagePosition是1,它们都是NSInteger,包括row。PHNumRow是8。
如果PHNumRow为NSInteger,我将得到预期的结果:-1。但如果PHNumRow为NSUInteger,则结果为垃圾。
除数是无符号的还是有符号的又有什么关系呢?我不会把结果放在一个无符号整型中。
发布于 2009-03-14 17:42:53
因为整数提升。当计算右侧时,所有参数都将提升为表达式的最高类型的操作数,如果PHNumRow为无符号整数,则该类型的操作数将是无符号整数。编译器执行类似于以下内容的操作:
((NSUInteger)stagePosition - (NSUInteger)col) / PHNumRow;因为,stagePosition是负的,所以有一个环绕式,你的计算就会爆炸!
https://stackoverflow.com/questions/646276
复制相似问题