逻辑运算符和位于运算符的区别

一、“&”和“&&”的含义和区别

1、“&”含义:

“&”运算符既可以作为一元运算符也可以作为二元运算符。

一元“&”:运算符返回操作数的地址(要求(unsafe)不安全上下文)。

为整型和 bool 类型预定义了二进制 & 运算符:对于整型,& 计算操作数的逻辑按位“与”,也就是对1/0的运算,当且仅当两个操作数都为1时,结果才为1,其它都是0;对于 bool 操作数,& 计算操作数的逻辑“与”;也就是说,当且仅当两个操作数均为 true 时,结果才为 true,其它的都是false。

& 运算符计算两个运算符,与第一个操作数的值无关。

二元“&”:用户定义的类型可重载二元 & 运算符(重载内置运算符)。在枚举时通常允许整型运算。重载二元运算符时,也会隐式重载相应的赋值运算符(如果有)。

 
class BitwiseAnd
{
static void Main()
{
Console.WriteLine(true & false); // logical and
Console.WriteLine(true & true); // logical and
Console.WriteLine("0x{0:x}", 0xf8 & 0x3f); // bitwise and
}
}
2、“&&”含义:

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

如表达式X&&Y和X&Y,如果X为false,Y为true。则第一个表达式只计算X,不计算Y,因为不论Y为何值,“与”操作的结果都是false。这种情况被称作“断路”计算。而第二个表达式都进行计算。

3,“&”和“&&”的区别

例子:

 
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());
}
}

由上面的例子我们可以清楚的看到。当使用“&”时,程序会将两个操作数都进行计算后然后得出结果,而“&&”当第一个操作数是false的时候,就没有必要进行计算第二个操作数,直接得出结果false。

二、“|”和“||”的含义和区别

1、“|”的含义:

| 运算符是为整型和 bool 预定义的。 对于整型, |计算操作数的按位“或”,就是对0/1,当且仅当两个操作数中的一个为1,结果就是1。 对于 bool 操作数, | 计算操作数的逻辑“或”;也就是说,当且仅当两个操作数均为 false 时,结果才为 false。

class OR
{
static void Main()
{
Console.WriteLine(true | false); // logical or
Console.WriteLine(false | false); // logical or
Console.WriteLine("0x{0:x}", 0xf8 | 0x3f); // bitwise or
}
}

和与运算,“|”按位或运算,应该结果应该选取较大的值。

2、“||”的含义:

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

如表达式X||Y和X|Y,如果X为true,Y为false。则第一个表达式只计算X,不计算Y,因为不论Y为何值,“或”操作的结果都是true。这种情况被称作“短路”计算。而第二个表达式都进行计算。

3,“|”和“||”的区别

例子:

 
class ConditionalOr
{
static bool Method1()
{
Console.WriteLine("Method1 called");
return true;
}
static bool Method2()
{
Console.WriteLine("Method2 called");
return false;
}
static void Main()
{
Console.WriteLine("regular OR:");
Console.WriteLine("result is {0}", Method1() | Method2());
Console.WriteLine("short-circuit OR:");
Console.WriteLine("result is {0}", Method1() || Method2());
}
}

由上面的例子我们可以清楚的看到。当使用“|”时,程序会将两个操作数都进行计算后然后得出结果,而“||”当第一个操作数是ture的时候,就没有必要进行计算第二个操作数,直接得出结果ture。


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值