首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c89和c99中的余数运算符

c89和c99中的余数运算符
EN

Stack Overflow用户
提问于 2012-11-03 10:29:55
回答 2查看 1.5K关注 0票数 5

c99标准指出,模块化操作的结果与第一个操作数具有相同的符号。所以-9 % 7 = -29 % -7 = 2

我在一本书中读到c89标准依赖于实现。所以-9 % 7可以产生-2-2-9 / 7的剩余部分如何可以是5

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-03 10:34:34

考虑两个数字ab

q=a/b和剩余r=a%b满足a == q*b + r方程。

-9 %7产生5的C89 (假设的)实现是将-9 /7计算为-2的实现。

数学(欧几里得)除法约束r为正且小于b。C99将其限制为与a相同的符号,并严格限制在-bb之间。这只是一个惯例的问题。

票数 7
EN

Stack Overflow用户

发布于 2012-11-03 10:35:55

%运算符被定义为:

代码语言:javascript
复制
a == (a / b * b) + a % b

所以

代码语言:javascript
复制
a % b = a - (a / b * b)

%作为余数运算符

如果/0 (如C99)射击:

代码语言:javascript
复制
-9 % 7 == -2

您有-9 / 7 == -1,所以%-2,因为

代码语言:javascript
复制
-9 % 7 == -9 - (-9 / 7 * 7) + 9 == -9 + 7 == -2 

%作为模算子

如果/向负无穷远的方向旋转:

代码语言:javascript
复制
-9 % 7 == 5

你有-9 / 7 == -2,所以%5

代码语言:javascript
复制
-9 % 7 == -9 - (-9 / 7 * 7) + 9 == -9 + 14 == 5
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13208287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档