C语言标准强调,如果x / y是可以表示的,那么(x / y) * y + x % y 必须等于x。当一个操作数为负数时,这种语义使得整数除法可以向零舍入,也可以向负无穷大舍入。
例如,如果 -13 / 5的结果定义为-2(向零舍入),那么-13 % 5必须等于-13 - (-13 / 5) * 5 = -13 - (-2) * 5 = -3。但如果-13 / 5 定义为-3(向负无穷大舍入),那么-13 % 5的值必须是-13 - (-3) * 5 = 2。
C语言标准强调,如果x / y是可以表示的,那么(x / y) * y + x % y 必须等于x。当一个操作数为负数时,这种语义使得整数除法可以向零舍入,也可以向负无穷大舍入。
例如,如果 -13 / 5的结果定义为-2(向零舍入),那么-13 % 5必须等于-13 - (-13 / 5) * 5 = -13 - (-2) * 5 = -3。但如果-13 / 5 定义为-3(向负无穷大舍入),那么-13 % 5的值必须是-13 - (-3) * 5 = 2。