Vij*_*esh -4 c
#include <stdio.h> int main() { int x = 9; int y = 2; int z = x - (x / y) * y; printf("%d", z); return 0; }
为什么这段代码会打印出值x % y?
x % y
从严格的数学角度来看,(x/y)*y是相同的x,所以如果以这种方式观察,人们可能会期望打印0.
(x/y)*y
x
dbu*_*ush 5
原因在于/操作员如何使用特定类型.
/
除法运算x/y作为整数除法执行,因为两个操作数都是整数类型.因此,结果值具有截断的小数部分.
x/y
因此,乘以该结果y将不一定x与截断结果值相同.这个结果和之间的区别x是x%y.
y
x%y
根据C标准第6.5.5节:
6 当整数被划分时,/运算符的结果是代数商,丢弃任何小数部分. 如果商a/b是可表示的, 则表达式(a/b)*b + a%b 应相等a ; 否则,双方的行为a/b和a%b 不确定.
a/b
(a/b)*b + a%b
a
a%b
因此标准明确规定这种平等成立.
如果除法的任一操作数是浮点类型,则x-(x/y)*y由于浮点运算的不精确性,它将始终为0或非常接近0的值.
x-(x/y)*y
归档时间:
9 年,4 月 前
查看次数:
112 次
最近记录: