Побитовый приоритет операторов - PullRequest
3 голосов
/ 17 сентября 2010

Гоча, с которой я несколько раз сталкивался на C-подобных языках, такова:

original | included & ~excluded   // BAD

Из-за старшинства это выглядит как:

original | (included & ~excluded)   // '~excluded' has no effect

Кто-нибудь знаетчто стояло за первоначальным проектным решением трех отдельных уровней приоритета для побитовых операторов?Что еще более важно, вы согласны с решением и почему?

Ответы [ 2 ]

7 голосов
/ 17 сентября 2010

Операторы имели этот приоритет с, по крайней мере, C .

Я согласен с порядком, поскольку это тот же относительный порядок, что и относительный порядок арифметических операторов, с которыми они наиболее похожи (+, * и отрицание).

Здесь вы можете увидеть сходство & против * и | против + здесь:

A  B | A&B A*B | A|B A+B 
0  0 |  0   0  |  0   0
0  1 |  0   0  |  1   1
1  0 |  0   0  |  1   1
1  1 |  1   1  |  1   2

Сходство побитового нет и отрицания можно увидеть по этой формуле:

~A = -A - 1
1 голос
/ 17 сентября 2010

Чтобы расширить ответ Марка Байерса, в булевой алгебре (широко используемой инженерами-электриками для упрощения логических схем до минимального числа вентилей и во избежание условий гонки), традиция состоит в том, что побитовое И имеет прецедент над побитовым ИЛИ.С просто следовал этой устоявшейся традиции.См. http://en.wikiversity.org/wiki/Boolean_algebra#Combining_Operations:

Так же, как в обычной алгебре, где умножение имеет приоритет над сложением, И имеет приоритет (или приоритет) над ИЛИ.

...