What is the reason behind giving &, ^ and | different precedence levels in C? I'm asking for C because most modern languages inherit similar precedence from C. But I don't know much about languages before C. Beside that, it's seems counter-intuitive for me to assign different precedences for operations that are almost identical.
I have heard that, in the beginning C didn't have logical operators. In that case they might had used the same operators for logical and bitwise, and hence they may have ended up with different precedence levels. But in that case, are there any languages, probably existing alongside or before C, which put all three operators at equal precedence?