“&”和“&&”运算符有什么区别?它们的用途是什么?
What is the difference and what are the "&" and "&&" operators used for?
我有两个条件来验证 "a" 是否等于零和 "b" 是否小于 5,两者的行为方式相同,但运算符不同,它们之间有什么真正的区别吗?
var a = 0;
var b = 3;
if (!a & (b < 5)) {
}
if (!a && b < 5) {
}
主要区别在于 & 运算符是按位运算符,而 && 运算符是逻辑运算符。
按位运算符作用于位并执行 "bit by bit" 运算,它们应用于一个或两个操作数的位。 & 表示按位与运算——其中 A 和 B 表示两个输入;为了使 C 为真,两个输入都必须为真。
例如,在您提供的示例中:
if(0 & 1){
}
将 0 和 1 作为输入进行按位与运算的结果为 0(假),因为两个输入都必须为真才能使输出为真。
&&运算符是一个逻辑运算符,用于根据多个条件做出决定。它可以应用于一个或两个操作数,每个操作数可能为真或为假。
if (!a && b < 5) {
}
上面的计算结果仍然为 false,因为要执行 if 语句中的代码必须同时满足这两个条件。除此之外,使用 && 运算符将(取决于语言)短路,这意味着 if 的第二个条件仅在结果未由第一个条件确定时才会被评估。
因此,一旦发现 a 为零(假),此表达式就会失败,因为没有必要评估第二个表达式,因为第一个表达式必须为真。这是另一个区别,因为按位 & 运算符不会短路。
我有两个条件来验证 "a" 是否等于零和 "b" 是否小于 5,两者的行为方式相同,但运算符不同,它们之间有什么真正的区别吗?
var a = 0;
var b = 3;
if (!a & (b < 5)) {
}
if (!a && b < 5) {
}
主要区别在于 & 运算符是按位运算符,而 && 运算符是逻辑运算符。
按位运算符作用于位并执行 "bit by bit" 运算,它们应用于一个或两个操作数的位。 & 表示按位与运算——其中 A 和 B 表示两个输入;为了使 C 为真,两个输入都必须为真。
例如,在您提供的示例中:
if(0 & 1){
}
将 0 和 1 作为输入进行按位与运算的结果为 0(假),因为两个输入都必须为真才能使输出为真。
&&运算符是一个逻辑运算符,用于根据多个条件做出决定。它可以应用于一个或两个操作数,每个操作数可能为真或为假。
if (!a && b < 5) {
}
上面的计算结果仍然为 false,因为要执行 if 语句中的代码必须同时满足这两个条件。除此之外,使用 && 运算符将(取决于语言)短路,这意味着 if 的第二个条件仅在结果未由第一个条件确定时才会被评估。
因此,一旦发现 a 为零(假),此表达式就会失败,因为没有必要评估第二个表达式,因为第一个表达式必须为真。这是另一个区别,因为按位 & 运算符不会短路。