我在VHDL编程中遇到了这些语句,无法理解两个运算符mod和rem之间的区别
9 mod 5
(-9) mod 5
9 mod (-5)
9 rem 5
(-9) rem 5
9 rem (-5)
Run Code Online (Sandbox Code Playgroud)
Mor*_*mer 28
一种看待不同的方法是在测试平台上运行快速模拟,例如使用如下过程:
process is
begin
report " 9 mod 5 = " & integer'image(9 mod 5);
report " 9 rem 5 = " & integer'image(9 rem 5);
report " 9 mod (-5) = " & integer'image(9 mod (-5));
report " 9 rem (-5) = " & integer'image(9 rem (-5));
report "(-9) mod 5 = " & integer'image((-9) mod 5);
report "(-9) rem 5 = " & integer'image((-9) rem 5);
report "(-9) mod (-5) = " & integer'image((-9) mod (-5));
report "(-9) rem (-5) = " & integer'image((-9) rem (-5));
wait;
end process;
Run Code Online (Sandbox Code Playgroud)
它显示结果:
# ** Note: 9 mod 5 = 4
# ** Note: 9 rem 5 = 4
# ** Note: 9 mod (-5) = -1
# ** Note: 9 rem (-5) = 4
# ** Note: (-9) mod 5 = 1
# ** Note: (-9) rem 5 = -4
# ** Note: (-9) mod (-5) = -4
# ** Note: (-9) rem (-5) = -4
Run Code Online (Sandbox Code Playgroud)
维基百科 - Modulo操作 有详尽的描述,包括规则:
n在a mod na在a rem n所述mod操作者给出的残基为向下舍入(地板分裂)的分割,所以a = floor_div(a, n) * n + (a mod n).优点是,即使通过零增加也是a mod n重复的锯齿图a,这在某些计算中很重要.
该rem运营商给予的正规整数除法余数a / n四舍五入向0(截断师),所以a = (a / n) * n + (a rem n).