2011-01-13 165 views
29

在C編程語言中,爲什麼按位運算符(&和|)比等號運算符(==)的優先級低?這對我沒有意義。運算符優先級(按位'&'低於'==')

+2

因爲這是他們設計它的方式。另外,括號很便宜。 – CanSpice 2011-01-13 20:50:58

+0

爲什麼它對你沒有意義? – peoro 2011-01-13 20:54:40

+12

當我使用表達式(a&b == c)時,我被抓到了,花了我一段時間才發現它爲什麼不起作用。 – poida 2011-01-13 21:00:42

回答

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運算符。這可能就是爲什麼他們選擇這樣的優先羣體,但我同意你的看法,回想起來這似乎不是一個好主意。