当b不为零时,我总是有`(a/b*b)+ a%b == a`吗?

upd*_*liu 11 c c++

因为int a, b,我知道当只有一个a并且b是否定的时候,结果a / ba % b机器有关.但是,我什么(a / b * b) + a % b == a时候b不是零?

Jam*_*lis 18

C++11§5.6[expr.mul]/4指定:

如果商a/b在结果类型中可表示,(a/b)*b + a%b则等于a.

C11§6.5.5/ 6规定了相同的措辞略有不同:

如果商a/b是可表示的,则表达式(a/b)*b + a%b应相等a; 否则,双方的行为a/ba%b不确定.

  • 请注意,"如果商是可表示的"条款是必不可少的.例如,如果`a == INT_MIN`和`b == - 1`,则相等性为假(并且行为未定义). (2认同)