我可以在 C 中使用按位运算符而不是条件运算符吗?
Can I use bitwise operators instead of conditional operators in C?
我可以使用&和|吗?而不是 && 和 ||在 C 语言家族中?这当然不适用于对象。有什么区别吗?如果没有,那么为什么存在条件运算符?
例如:
if (3 && 5) // true
if (3 & 5) // also true
正如评论中指出的那样:
1 && 2
is true, 1 & 2
is false.
此外,
Bitwise operators don't short-circuit.
if (3 & 5) // also true
是因为按位 &
的结果是 1
使用 8 位:
0b00000101 &
0b00000011
------------
0b00000001
但是什么if ( 2 & 5 )
0b00000010 &
0b00000101
------------
0b00000000
所以是 false
而 if ( 2 && 5)
仍然是 true
;
逻辑运算符和位运算符有很大的不同。逻辑运算符 return 一个布尔值(0 或 1),而位运算符 return 一个基于逐位应用该位运算符的整数。示例:15 & 8 = 8,而 15 && 8 = 1。从语法上讲,您可以使用按位运算符代替逻辑运算符,但从语义上讲这是错误的。
我可以使用&和|吗?而不是 && 和 ||在 C 语言家族中?这当然不适用于对象。有什么区别吗?如果没有,那么为什么存在条件运算符?
例如:
if (3 && 5) // true
if (3 & 5) // also true
正如评论中指出的那样:
1 && 2
is true,1 & 2
is false.
此外,
Bitwise operators don't short-circuit.
if (3 & 5) // also true
是因为按位 &
的结果是 1
使用 8 位:
0b00000101 &
0b00000011
------------
0b00000001
但是什么if ( 2 & 5 )
0b00000010 &
0b00000101
------------
0b00000000
所以是 false
而 if ( 2 && 5)
仍然是 true
;
逻辑运算符和位运算符有很大的不同。逻辑运算符 return 一个布尔值(0 或 1),而位运算符 return 一个基于逐位应用该位运算符的整数。示例:15 & 8 = 8,而 15 && 8 = 1。从语法上讲,您可以使用按位运算符代替逻辑运算符,但从语义上讲这是错误的。