在C編程語言中,爲什麼按位運算符(&和|)比等號運算符(==)的優先級低?這對我沒有意義。運算符優先級(按位'&'低於'==')
29
A
回答
44
你需要問問Brian Kernighan或Dennis Ritchie。
從這個論壇:http://bytes.com/topic/c/answers/167377-operator-precedence
的& &和||由於其「短路」行爲,後來增加了運營商 。 Dennis Ritchie在 中承認,當添加邏輯運算符時,按位運算符的優先級應該有 被更改。但與幾個 幾百KB的C源代碼存在在這一點上和 安裝三臺電腦的基礎上,丹尼斯認爲這將是太大了C語言的變化 ...
所以,這可能是一個原因?我猜測,因爲有幾層按位優先(與關係比較不同),它是自從...永遠存在以來一直存在的,並且從未被糾正的。
3
我沒有一個權威的答案,爲什麼K & R選擇了他們的優先順序。一個例子,使的感覺相當數量的將是這樣一個:
if (x == 1 & y == 0) {
/* ... */
}
由於這是按位與運算,它使用一個非短路評估模式,如將
if (x == 1 | y == 0) {
/* ... */
}
使用非短路OR運算符。這可能就是爲什麼他們選擇這樣的優先羣體,但我同意你的看法,回想起來這似乎不是一個好主意。
13
回想起來,Dennis Ritchie也沒有任何意義。
http://www.lysator.liu.se/c/dmr-on-or.html
& &和||在|之後添加到語言中和&,並且爲了兼容性而保持了優先級。
相關問題
- 1. Numpy按位運算符優先級?
- 2. PHP:運算符優先級
- 3. JavaScript運算符優先級
- 4. RethinkDB運算符優先級
- 5. C運算符優先級
- 6. C++運算符優先級
- 7. 運算符優先於php
- 8. Haskell中的運算符優先級
- 9. Haskell類型運算符優先級
- 10. shell運算符的優先級
- 11. 運算符優先級'pow'和'root'
- 12. 運算符優先級超載
- 13. Laravel多WHERE()運算符優先級
- 14. Scala中的運算符優先級
- 15. 運算符優先級和關聯
- 16. Javascript運算符優先級技術性
- 17. Java模運算符的優先級
- 18. 括號內的運算符優先級
- 19. C#和VB.NET運算符優先級
- 20. - a vs a--,運算符優先級
- 21. 運算符優先級拼圖
- 22. javascript中的運算符優先級
- 23. 運算符優先級:!並等待
- 24. Python中的運算符優先級-PEMDAS
- 25. 欺騙Python的運算符優先級
- 26. 信息衝突運算符優先級
- 27. 更改運算符優先級
- 28. 奇怪的運算符優先級與?? (空合併運算符)
- 29. 運算符優先算法
- 30. 從低優先級從java運行ffmpeg
因爲這是他們設計它的方式。另外,括號很便宜。 – CanSpice 2011-01-13 20:50:58
爲什麼它對你沒有意義? – peoro 2011-01-13 20:54:40
當我使用表達式(a&b == c)時,我被抓到了,花了我一段時間才發現它爲什麼不起作用。 – poida 2011-01-13 21:00:42