取餘與取模的區別,以及在C (C )中的使用

2021-08-11 14:39:59 字數 982 閱讀 9145

c++和c#中,運算子『%』為取餘運算子,而並非取模預算符,在一些應用場景中,如果不加以區分,會產生嚴重的bug。

取餘運算(complementation)和取模運算(modulo operation)的區別:

對於整型數a,b來說,取模運算或取餘運算的方法都是:

第一步:求 整數商: c = a/b;

第二步:計算模或者餘數: r = a - c*b.

兩者的區別在於第一步:

取餘運算在取c的值時,向0 方向捨入(fix()函式);

取模運算在計算c的值時,向負無窮方向捨入(floor()函式)。

例如:a = -7,b = 4

第一步:求整數商c,求餘c = -1(向0方向捨入),求模運算c = -2(向負無窮方向捨入);

第二步:計算模和餘數的公式相同,但因c的值不同,求余時r = -3,求模時r = 1。

需要特別注意的是:c++和c#中,運算子『%』是取餘運算子

c++ 示例**

std::cout

<< "c++ 中『%』運算子完成取餘運算,而非取模運算"

<< std::endl;

a = -7;

r = a%b;

std::cout

<< a << " % "

<< b << " = "

<< r << std::endl;

std::cout

<< "------------取模運算---------------------"

<< std::endl;

double ad = a;

double cd = floor(ad / b); //向負無窮方向捨入

r = ad - cd*b;

std::cout

<< ad << " mod "

<< b << " = "

<< r << std::endl;

取模與取餘的區別

其實取模和取餘在目標上是一致的,但是因為語言對取餘和取模上定義的不同,導致得到的結果不同。對取餘和取模定義不同的語言中,兩者的不同點只有乙個 取餘運算在計算商值向0方向捨棄小數字 取模運算在計算商值向負無窮方向捨棄小數字 同時,也可以這樣理解 從上面的區別可以總結出,取餘 rem 和取模 mod 在...

C 中的取餘與取模

目前為止,我並沒有找到c 中數學意義上的取模操作。是一種取餘運算。假設r a mod b,關於取模與取餘的一點概念有 那麼,c 中什麼時候會用到取模?在型別轉換時,當把乙個超出範圍的值v賦給乙個無符號型別時,其計算方法是 先確定無符號型別的可取數n 最終結果 v mod n 比如,把 1賦值給uns...

取模(mod)與取餘(rem)的區別

取模 mod 與取餘 rem 的區別 matlab學習筆記 09 11 15 昨天在學習matlab的數學函式時,教程中提到取模 mod 與取餘 rem 是不同的,今天在網上具體查了一下 通常取模運算也叫取餘運算,它們返回結果都是餘數.rem和mod唯一的區別在於 當x和y的正負號一樣的時候,兩個函...