所以我得到了以下操作:
NSInteger articleIndex = self.featuredArticlesCounter % self.featuredArticles.count;
在这种情况下,self.featuredArticlesCounter为-1和
self.featuredArticles.count是10
所以它基本上是-1%10,应该是9,但结果是5。
Google says它是9。
如果我做NSInteger articleIndex = -1 % 10;
,它会给我-1
我已经尝试将NSUInteger从count转换为NSInteger,但这不起作用。 我已经尝试在所有地方插入括号,但这也不起作用。
我已经切换到使用((-1 % 10) + 10) % 10
。
但我仍然想知道这笔交易是什么。 有什么想法吗?
修改:
featuredArticlesCounter是一个signed int
self.featuredArticles.count是一个unsigned int
答案 0 :(得分:6)
featuredArticlesCounter
显然是unsigned int。当您认为将其设置为-1时,您确实将其设置为2**32 - 1
(~0)。 That number mod 10 is 5。 (显然,2**(8k)-1 % 10
是5,所以实际上无符号的大小并不重要。)
至于为什么-1 % 10
是-1
,我相信C中负数的mod是实现定义的,但在这种情况下(如在Java中),它被定义为{{1 }}。如果你插入负号,x / y + x % y == x
。
答案 1 :(得分:3)
也许硬件(或软件?)将数字视为无符号整数:
-1 == 0xFFFFFFFF
(两个赞美编码)
0xFFFFFFFF == 4294967295
(假设原始数据是无符号整数)
4294967295 % 10 == 5
(观察最后一位数无关紧要)
这是我最好的猜测。