所以如果我有x = 0x01
并且y = 0xff
我有x & y
,我会得到0x01
。如果我这样x && y
做了,我仍然会得到0x01
,但计算机只是说它是真的,如果它有什么比0x00
?我的问题是,无论按位还是逻辑与/或,运算后的位是否相同,但计算机只是以不同的方式解释最终结果?换句话说,& 和 &&(同样是 | 和 ||)运算结果的十六进制值是否相同?
编辑:在这里谈论C
所以如果我有x = 0x01
并且y = 0xff
我有x & y
,我会得到0x01
。如果我这样x && y
做了,我仍然会得到0x01
,但计算机只是说它是真的,如果它有什么比0x00
?我的问题是,无论按位还是逻辑与/或,运算后的位是否相同,但计算机只是以不同的方式解释最终结果?换句话说,& 和 &&(同样是 | 和 ||)运算结果的十六进制值是否相同?
编辑:在这里谈论C
答案取决于使用的精确语言。
在一些弱类型语言(例如 Perl、JavaScript)中,如果两者都是“真实的”,或者其他情况,a && b
将评估为实际值。b
a
b
a
在 C 和 C++ 中,&&
运算符将只返回 0 或 1,即int
等价于true
或 false。
int
在 Java 和 C# 中,提供to甚至是不合法的&&
——操作数必须已经是布尔值。
对于anda && b == a & b
的所有合法值,我不知道任何语言在我的脑海中。a
b
在 C# 中,运算符的行为有所不同: && 只允许用于布尔类型,而 & 也允许用于任何整数类型。
如果 a 和 b 都为真,则 a && b 返回真。a & b 返回按位与运算的结果。