今天遇到这样一道题:
在C语言中,表达式23|2^5的值是()
A 18
B 1
C 23
D 32
正确答案选C,为什么呢?一分钟讲完咱们就下课
“|”、“^”是逻辑位运算符
C语言里,逻辑位运算符“|”、“^”的定义是这样的:
“|” 运算符(位或)用于对两个二进制操作数逐位进行比较,并根据如表格所示的换算表返回结果。
第一个数的位值 | 第二个数的位值 | 运算结果 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
“^”运算符(位异或)用于对两个二进制操作数逐位进行比较,并根据如表格所示的换算表返回结果。
第一个数的位值 | 第二个数的位值 | 运算结果 |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
回头来看这道题:
“^”优先级高于“|”
下图以算式的形式解析了 2 和 5 进行位异或运算的过程。
2 和 5 进行位异或运算,得到 7;
下图以算式的形式解析了 7 和 23 进行位或运算的过程。
所以,答案是 23,选 C。
有兴趣的可以看看 JS &、|、^和~(逻辑位运算符),
里面写了JS的位或运算符,JS的位或运算符与C语言是一样的。