在LZ举的例子中没有区别。但在其他时候可以有区别。区别就在于: if (A && B) 如果 A 为 false ,整个表达式就为 false,不再计算 B 的值了。 if (A & B) 如果 A 为 false ,整个表达式就为 false,但还要计算 B 的值。如果 B 是有副作用的表达式就有区别了。如:int i = 5; if (false && ++i == 0) // i 保持为 5 if (false & ++i == 0) // i 变为 6
using System;class Program { static void Main() { int i = 5; if (false && ++i == 0) {} Console.WriteLine(i); // i 保持为 5 if (false & ++i == 0) {} Console.WriteLine(i); // i 变为 6 } }
请参考在线MSDN:http://msdn.microsoft.com/zh-cn/library/2a723cdk.aspxC# 语言参考 && 运算符(C# 参考)条件“与”运算符 (&&) 执行其 bool 操作数的逻辑“与”运算,但仅在必要时才计算第二个操作数。备注操作x && y 对应于操作x & y 不同的是,如果 x 为 false,则不计算 y(因为不论 y 为何值,“与”操作的结果都为 false)。这被称作为“短路”计算。
&&、|| 两边只能是bool类型&、| 两边可以是bool类型或者是数值类型
& 运算符既可作为一元运算符也可作为二元运算符。一元 & 运算符返回操作数的地址(要求 unsafe 上下文)。为整型和 bool 类型预定义了二进制 & 运算符。对于整型,& 计算操作数的逻辑按位“与”。对于 bool 操作数,& 计算操作数的逻辑“与”;也就是说,当且仅当两个操作数均为 true 时,结果才为 true。& 运算符计算两个运算符,与第一个操作数的值无关。int i = 0; if (false & ++i == 1) { // i is incremented, but the conditional // expression evaluates to false, so // this block does not execute. }
C++ java && 运算符条件“与”运算符 (&&) 执行其 bool 操作数的逻辑“与”运算,但仅在必要时才计算第二个操作数。 x && y 对应于操作是,不管是否为false,先执行。而x & y x为false,则不执行y(因为不论y为何值,“与”操作的结果都为false)。也称作为“短路”计算。 本人和12楼是正确的。 &也有一种逻辑运算。也就是&是位逻辑与运算,位逻辑与运算将两个运算对象按位进行与运算。与运算的规则:1与1等于1,1与0等于0。 比如:10010001(二进制)&11110000等于10010000(二进制)。
&是位运算符 &&是逻辑运算符
&&具有短路求值的特性 也就是说如果 a &&b如果a为false则不再去计算b的值,而 & 则都要取计算 如果你的判断语句条件较多的话 强烈建议用&&
[Quote=引用 8 楼 wuyi8808 的回复:] 引用楼主 goopoolzl 的帖子: 例如if(a==0&&b==0)和if(a==0&b==0)的区别是什么啊 有点混住了。。 在LZ举的例子中没有区别。 但在其他时候可以有区别。 区别就在于: if (A && B) 如果 A 为 false ,整个表达式就为 false,不再计算 B 的值了。 if (A & B) 如果 A 为 false ,整个表达式就为 false,但还要计算 B 的值。 如果 B 是有副作用的表达式就有区别了。 这个回答是正确的,你可以找一本基础一点的书翻翻~~~
&是位逻辑与运算,位逻辑与运算将两个运算对象按位进行与运算。与运算的规则:1与1等于1,1与0等于0。
比如:10010001(二进制)&11110000等于10010000(二进制)。
按位AND: 1001 0110 & 1111 1111 : 1001 0110 (二进制位)
没什么区别,只不过&&在C中比较专业点~
|按位或: 1001 0110 | 1111 1111 : 1111 1111 (二进制位)
在LZ举的例子中没有区别。但在其他时候可以有区别。区别就在于:
if (A && B) 如果 A 为 false ,整个表达式就为 false,不再计算 B 的值了。 if (A & B) 如果 A 为 false ,整个表达式就为 false,但还要计算 B 的值。如果 B 是有副作用的表达式就有区别了。如:int i = 5;
if (false && ++i == 0) // i 保持为 5
if (false & ++i == 0) // i 变为 6
{
static void Main()
{
int i = 5;
if (false && ++i == 0) {}
Console.WriteLine(i); // i 保持为 5
if (false & ++i == 0) {}
Console.WriteLine(i); // i 变为 6
}
}
&& 运算符(C# 参考)条件“与”运算符 (&&) 执行其 bool 操作数的逻辑“与”运算,但仅在必要时才计算第二个操作数。备注操作x && y 对应于操作x & y 不同的是,如果 x 为 false,则不计算 y(因为不论 y 为何值,“与”操作的结果都为 false)。这被称作为“短路”计算。
if (false & ++i == 1)
{
// i is incremented, but the conditional
// expression evaluates to false, so
// this block does not execute.
}
&& 运算符条件“与”运算符 (&&) 执行其 bool 操作数的逻辑“与”运算,但仅在必要时才计算第二个操作数。
x && y 对应于操作是,不管是否为false,先执行。而x & y x为false,则不执行y(因为不论y为何值,“与”操作的结果都为false)。也称作为“短路”计算。
本人和12楼是正确的。
&也有一种逻辑运算。也就是&是位逻辑与运算,位逻辑与运算将两个运算对象按位进行与运算。与运算的规则:1与1等于1,1与0等于0。
比如:10010001(二进制)&11110000等于10010000(二进制)。
&&是逻辑运算符
如果你的判断语句条件较多的话 强烈建议用&&
&&:而这个不需要,逻辑短路,做了一下优了,当a==0为false时,不再记算b==0的结算
& 是位运算符 : (1001 & 0001) = 0001
回答只能得50分。大多数程序员很可能不知道它还能充当其他的运算符——布尔逻辑运算符(前提是
两边的数据类型为布尔类型)。 在布尔逻辑运算符中这三个运算符充当着“布尔逻辑与”、“布尔逻辑或”和“布尔逻辑异或”的角
色。前面两个把它们再复制一个放在一起就成了逻辑运算符。布尔逻辑与(&)和布尔逻辑或(|)运
算符的工作方式同逻辑与(&&)和逻辑或(||)的工作方式相同,布尔逻辑运算符的优先级别要高于
逻辑运算符,除此之外它们还有一点细微的差别: 编译器对于 && 和 || 已经优化过的,凡 && 前面的是 false,那 && 后面的
表达式就不再进行计算了。|| 前面的是 true,|| 后面的也就不做了,这就是
所谓的“短路”。 而布尔逻辑运算符就没有这个特点,无论运算符前面的是 true 或 false,运算
符后面的表达式都得继续进行运算。最后一个布尔逻辑异或(^)用得就更少了,可以采用关系运算符不等于(!=)来代替。布尔逻辑运算符与逻辑运算符还有个区别,就是布尔逻辑运算符可以与赋值运算符(=)结合成布尔逻
辑赋值运算符(&=、|=、^=),而逻辑运算符就没有这样的功能,可能它本身就有两个了吧,再结合
“=”的话就变三个了,呵呵,太多了 :)
C#应该和JAVA相差不大的吧
我不懂 C#,不过在 C/C++ 的范围内你这么说是要被人笑掉大牙的!UINT a = 0x00000001,b = 0x00000010;if(a && b) => true
if(a & b) => false
按位AND: 1001 0110 & 1111 1111 : 1001 0110 (二进制位)
真解
&算完
&是位逻辑与运算,位逻辑与运算将两个运算对象按位进行与运算。与运算的规则:1与1等于1,1与0等于0。
比如:10010001(二进制)&11110000等于10010000(二进制)。支持一楼的答案,但是实际中用的情况可能不同
&&是条件与运算,用于条件判断的。 比如 > < = || 这些都是
&是位逻辑与运算,是最基本的 异或非
&是位逻辑与运算
而&是一个位运算符,它又可以叫做“逻辑乘”例如:1&1=1;1&0=0
引用楼主 goopoolzl 的帖子:
例如if(a==0&&b==0)和if(a==0&b==0)的区别是什么啊 有点混住了。。
在LZ举的例子中没有区别。 但在其他时候可以有区别。 区别就在于:
if (A && B) 如果 A 为 false ,整个表达式就为 false,不再计算 B 的值了。 if (A & B) 如果 A 为 false ,整个表达式就为 false,但还要计算 B 的值。 如果 B 是有副作用的表达式就有区别了。 这个回答是正确的,你可以找一本基础一点的书翻翻~~~
1.当左右均为判断等式时,功能几乎相同,区别仅为,当遇到false时,是否继续执行.&&
返回结果为true or false.
例:if(a==1 && b==2)
{
....
}
当a不为1时,语句到a==1时,即停止往下执行,即不需要执行判断b是否为2的语句,返回结果是false. 而当是&的情形
例:
if(a==1 & b==2)
{
...
}
即使a不为1时,仍旧执行后面的语句.
2.&连接的左右式子可以为数字,而&&不可以,必须为false?true的式子.
例:
System.out.println(2 & 3);//2
而
System.out.println(2&&3);//些语句本身就通不过.我只是个新手,如果有错误的地方请高手指教啦!
大家共同学习啦!
呵呵~
&&叫做短路运算符A&&B只要A为false就不会在计算B的值了
而如果使用&运算符的话就要在计算B的值||和|相反
在很多编程语言中都表示位运算
&&[b][/b][size=12px][/size]
则在很多编程语言中都表示与运算表示是AND的意思