如何在不使用運算符的情況下在C中實現模運算符?在C中實現模運算符作爲函數C
回答
簡單:
如果商
a/b
可表示,表達(a/b)*b + a%b
應等於a
(C99標準,6.5.5/6)。
做一個整數除法,然後乘以,然後減去。
#include <stdio.h>
int main()
{
int c=8, m=3, result=c-(c/m*m);
printf("%d\n", result);
}
在這裏你去:
a % b = a - (b * int(a/b))
這個轉換符號只適用於C++(不是C,問題會提到這個問題),而且如果a和b是整數,那麼它就是多餘的。但是downvote來自其他地方。 – 2010-04-18 07:08:03
@JonathanLeffler,能否請你解釋一下這在C中是行不通的。 – user674669 2012-10-07 16:42:43
@ user674669:在C語言中,你必須編寫'(int)(a/b)'。類型函數符號「int(a/b)」特定於C++。 – 2012-10-07 16:45:44
您可以通過重複地從x
減去y
和跟蹤結果的模擬x % y
。在每次迭代中,如果結果小於y
,那麼你有餘數,並且可以返回它。
如果計算機沒有乘法/除法功能,這可能會很慢但很有用。 – user674669 2012-10-07 16:41:40
這不是真正的軟件實現是如何工作的。一個真正的軟件實現會使第二個操作數翻倍,直到另一個操作數增加一倍,減去第二個操作數,然後開始將第二個操作數除以二並減去。 – EJP 2016-08-22 10:07:36
股息/除數=商數
式(在Python 3)低於:
Modolus =紅利 - 分紅//除數*除數
例如,如果股息= 5,和除數= 2,則
模量= 5 - 5 // 2 * 2成爲 5 - 2 * 2 5 - 4 記住//的H比 - 更高的優先級,所以5 // 2首先是 。
- 1. C++:實現模冪運算
- 2. 在C中實現sizeof運算符
- 3. 模數運算符在C#
- 4. 爲什麼在C中的printf函數不是模運算符?
- 5. C#運算符模數?
- 6. c模數運算符
- 7. C殼模數運算符
- 8. 在C中實現/實施環繞算術運算C
- 9. 運算符不解析爲運算符函數C++
- 10. 在C++中調用+ =運算符函數中的運算符+函數
- 11. 在C#中實現函數
- 12. 在C++中使用對數實現運算符重載
- 13. 模板類中的C++賦值運算符實現
- 14. 實現JS的算術運算符在node.js中C++插件
- 15. C#在函數上重載++運算符
- 16. 將運算符作爲參數傳遞給函數C
- 17. C/C++中的真模運算符?
- 18. 三元運算符作爲C宏中三元運算符的操作數
- 19. 在C++模板中使用運算符
- 20. 在C++中實現運算符在類頭之外的超載
- 21. 比較運算符`operator``作爲成員函數或外部函數的實現
- 22. 重載運算符[]爲模板類C++
- 23. :c/C++中的運算符
- 24. C++與&&運算符函數返回
- 25. OOP C++,虛函數和新運算符
- 26. 如何使用C在bash中實現邏輯運算符?
- 27. 在C++中實現shell的bash運算符
- 28. 如何在C中實現typeof運算符
- 29. 使用按位運算符在C++中恢復分區實現
- 30. 是否有三元運算符在c#中運行函數?
這並不直接回答這個問題,它僅僅是%運算符的公理定義(因此不是真正的「簡單」)。我想知道這個票數。 – Clifford 2010-04-18 08:17:15
@Clifford:可能是因爲有了明顯的轉換(從兩邊減去'(a/b)* b')它就成爲確定'a%b'的公式了嗎? – caf 2010-04-18 08:49:53
@ caf:也許,但「簡單」本來是爲了呈現「明顯的」轉變,而不是假設讀者擁有(雖然是基本的)數學技能。 OP的數學能力未知;假設它很明顯可能看起來像炫耀。 – Clifford 2010-04-18 15:24:23