新手菜鸟求助:if(a&b)和if(a&&b)有什么不同!

wcl2222 2009-10-04 03:13:22
有没有if(a&&b)这种写法,我知道&意思是a和b都必须都为true,条件才成立,&&呢,这个是什么意思呢,有必要用两个&&吗!请高人指点,谢谢!
...全文
4001 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
nosuchtracter 2009-10-04
  • 打赏
  • 举报
回复
&这个运算符我还没接触到哦
不会又是面试题吧?
wuyi8808 2009-10-04
  • 打赏
  • 举报
回复
与之相对应的是,条件“与”运算符,也请参见在线 msdn:
http://msdn.microsoft.com/zh-cn/library/2a723cdk.aspx

C# 语言参考
&& 运算符(C# 参考)

条件“与”运算符 (&&) 执行其 && 操作数的逻辑“与”运算,但仅在必要时才计算第二个操作数。

操作 x && y 对应于操作 x & y,不同的是,如果 x 为 false,则不计算 y(因为不论 y 为何值,“与”操作的结果都为 false)。这被称作为“短路”计算。


在下面的示例中,请观察使用 && 的表达式只计算第一个操作数。
class LogicalAnd
{
static bool Method1()
{
Console.WriteLine("Method1 called");
return false;
}

static bool Method2()
{
Console.WriteLine("Method2 called");
return true;
}

static void Main()
{
Console.WriteLine("regular AND:");
Console.WriteLine("result is {0}", Method1() & Method2());
Console.WriteLine("short-circuit AND:");
Console.WriteLine("result is {0}", Method1() && Method2());
}
}
/*
Output:
regular AND:
Method1 called
Method2 called
result is False
short-circuit AND:
Method1 called
result is False
*/
wuyi8808 2009-10-04
  • 打赏
  • 举报
回复
C# 的 bool 类型也可以应用二元的逻辑“与”运算符(&)的,请参见在线 msdn:
http://msdn.microsoft.com/zh-cn/library/sbf85k1c.aspx

C# 语言参考
& 运算符(C# 参考)

为整型和 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.
}
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiaonanpiao 的回复:]
&表示的是:地址符;通常连接变量用来表示在内存中以某一地址开始开辟的区域;(如指针&P)
&&是双目运算符,表示‘与’,与数理逻辑中的‘合取’、集合中的‘取交集’是相似的。
没用过,我不知道啊,应该会有警告或错误提示吧!?
[/Quote]

这是c#里边的东西抄来的吗?
xiaonanpiao 2009-10-04
  • 打赏
  • 举报
回复
&表示的是:地址符;通常连接变量用来表示在内存中以某一地址开始开辟的区域;(如指针&P)
&&是双目运算符,表示‘与’,与数理逻辑中的‘合取’、集合中的‘取交集’是相似的。
没用过,我不知道啊,应该会有警告或错误提示吧!?
  • 打赏
  • 举报
回复
哦,sorry,我没有仔细看你说了“我知道&意思是a和b都必须都为true”这样的话。

我想这是c#的问题,它看似不应该支持对bool型的&操作,这是很容易造成跟int的&操作的误会的。
  • 打赏
  • 举报
回复
[Quote=引用楼主 wcl2222 的回复:]
有没有if(a&&b)这种写法,我知道&意思是a和b都必须都为true,条件才成立,&&呢,这个是什么意思呢,有必要用两个&&吗!请高人指点,谢谢!
[/Quote]

if(a&b)?你编译通过过吗?

从c++里边学的?可是c#跟c++语法不一样啊。

这个只有在vb.net中才能写 if a & b then .....,可是你看起来并不是写vb.net呀?!

搞不懂了。你提问题之前先测试一下,然后贴出真正确实的代码来。
wuyi8808 2009-10-04
  • 打赏
  • 举报
回复
string s = "Test"; // 此时 s.Length == 4

if (s.Length > 4 && s[4] == 'A') ...
// 没问题,左边的表达式为假,所以整个表达式为假,不会计算右边的表达式。

if (s.Length > 4 & s[4] == 'A') ...
// 运行时会抛出异常,索引超出数组界限,即使左边的表达式为假,仍要计算右边的表达式,导致异常。
wuyi8808 2009-10-04
  • 打赏
  • 举报
回复
&& 有短路效应,也就是说如果根据 && 左边的表达式能判断出整句的真假的话,就不再计算右边的表达式了。

而 & 没有这种效应,无论如何,都会计算左右的表达式。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧