cpp中關於取模結果的型別

2021-08-28 18:41:42 字數 509 閱讀 3071

開門見山:cpp中取模運算得到的臨時數(右值)是乙個無符號數,如果直接拿臨時結果跟有符號數進行比較的話,就會發生型別轉換,得到意料之外的結果

起因:

在寫乙個lambda表示式的時候,如下

//this->end 和this->start都是int  值為0 ,max_buf是大於0的常量

int rcount=-1;

cv.wait(lock_u, [this, rcount]() );

你猜結果如何??

取模運算返回無符號的0,無符號的0與有符號的-1比較,後者被轉換成了無符號的最大值,所以比較就一直返回false.

解決

將模結果轉換成有符號的結果就行了

static_cast(this->end+ max_buf - this->start) % max_buf);

python怎麼取模 Python中的取模運算方法

所謂取模運算,就是計算兩個數相除之後的餘數,符號是 如a b就是計算a除以b的餘數。用數學語言來描述,就是如果存在整數n和m,其中0 m b,使得a n b m,那麼a b a n b m.取模運算的兩個運算元都必須是整數,可以是負整數,但是b不可以是0,因為被除數不能為0嘛。當a和b中存在負整數時...

python中的取模

這周展開了對python的學習,在學習運算子中對於取模符號 時出現了疑惑,特此記錄。在c語言中,符號表示的是求餘運算,而在python指令碼中,表示的是取模。通常取模運算中除數不允許是負數,但是在python 2.5.1裡可以在 後面跟負數,因為python語言中除法的結果是向無窮小方向捨入,因此計...

C 中的取餘與取模

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