[c#]&、&&、|、||的区别

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

一元 & 运算符返回操作数的地址:

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

1.& 运算符计算两个运算符,与第一个操作数的值无关。 例如:

            int i = 0;
            
            Console.WriteLine(false & ++i == 1);

结果是FALSE.

也可用于二元运算符:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace test23
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(true&true);
            Console.WriteLine(true&false);
            Console.WriteLine(false&false);
 
            Console.WriteLine("0x{0:x}",0xf8&0x3a);
            /*
             * 0xf8:1111 1000
             * 0x3a:0011 1010
             * 0011 1000==0x38    14
             */
            Console.ReadKey();
        }
    }
}

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

3. &&

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

如果 x是 false, y 不会计算,因为,和操作的结果是 false ,无论 y 的值为什么。 这被称作为“短路”计算。

4. ||

条件或运算符 (||) 执行的逻辑或其 bool 操作数。 如果第一个操作数计算结果为 true,第二个操作数对象不会计算。 如果第一个操作数计算结果为false,第二个运算符确定或表达式整体是否计算结果为 true 或 false。

如果 x 是 true,y 不会计算无论 y,的值,因为或操作是 true。 此概念称为“短路计算”。

& 是做逻辑与运算

比如 1 & 1 = 1

2 & 1 = 0 将十进制数据转换成二进制数据进行比较 (10 & 01 = 00)

|是做逻辑或运算

1|1 = 1

2 | 1 = 3 (10 | 01 = 11)

>> 是右移位运算 相等于除以2

<< 是左移位,相等于乘以2

逻辑与和逻辑或都是给整数的运算

&和|

都是把左右两边变成二进制,然后逐位进行运算

>>和<<也是变成二进制,然后往左边和右边移位

比如

17和13

17 二进制是 10001

13二进制是 01101

17 & 13 = 10001 & 01101 = 00001 也就是1

17 | 13 = 10001 | 01101 = 11101 也就是 29

17>> 就是10001 右移位 变成 01000 就变成8了

17<< 就是10001 左移位 变成100010 变成34 了

————————————————

猜你喜欢

转载自blog.csdn.net/weixin_46472622/article/details/129684485