如何在不使用運算符的情況下在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#
- 3. c模數運算符
- 4. C殼模數運算符
- 5. 在C中實現/實施環繞算術運算C
- 6. 運算符不解析爲運算符函數C++
- 7. 在C++中調用+ =運算符函數中的運算符+函數
- 8. 在C++中使用對數實現運算符重載
- 9. 模板類中的C++賦值運算符實現
- 10. 三元運算符作爲C宏中三元運算符的操作數
- 11. 在C++模板中使用運算符
- 12. OOP C++,虛函數和新運算符
- 13. 如何在C中實現typeof運算符
- 14. 如何使用C在bash中實現邏輯運算符?
- 15. 在C++表達式模板中實現Matlab的冒號:運算符類
- 16. 實現|| =和&& =操作符:運算符實現沒有匹配運算符聲明
- 17. C#模運算
- 18. 運算符()爲下標(C++)
- 19. C++運算符 ''
- 20. 運算符[] [] C++
- 21. 在C++中實現Matlab的fmincon函數
- 22. 如何在objective-c中實現/計算這個函數?
- 23. 運算符作爲C#中的方法參數
- 24. C++運算符和參數
- 25. C編程!算術運算符操作
- 26. C++函數映射實現
- 27. C++虛函數的實現?
- 28. 交換實現函數c
- 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