gpt4 book ai didi

C怪异的模运算

转载 作者:太空狗 更新时间:2023-10-29 15:19:58 25 4
gpt4 key购买 nike

所以我得到了这个东西,我得到了以下操作:

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 是一个有符号整数

self.featuredArticles.count 是一个无符号整数

最佳答案

featuredArticlesCounter 显然是一个无符号整数。当你认为你将它设置为 -1 时,你实际上将它设置为 2**32 - 1 (~0)。 That number mod 10 is 5 . (显然,2**(8k)-1 % 10 是 5,所以无符号的实际大小并不重要)

至于为什么 -1 % 10-1,我相信在 C 中负数的模是实现定义的,但在这种情况下(如在 Java 中),它被定义为 x/y + x % y == x。如果插入负数,-1/10 + -1 % 10 = -1 -> -1 % 10 = -1

关于C怪异的模运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18536432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com