VHDL中mod和rem运算符的区别?

mus*_*akc 12 vhdl

我在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操作 有详尽的描述,包括规则:

  • mod有除数的标志,因此na mod n
  • rem有分红的迹象,因此aa 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).