65.9K
CodeProject 正在变化。 阅读更多。
Home

C# 中的按位运算

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.57/5 (19投票s)

2001 年 11 月 7 日

4分钟阅读

viewsIcon

298966

downloadIcon

2

在 C# 中使用按位运算符。

引言

C# 在位操作方面具有很大的灵活性。在开始解释位操作之前,我想先介绍一下二进制运算。

二进制数

仅用两个符号就可以表示您想要的任何类型的信息,这些符号可以是 {a,b}、{0,1} 或摩尔斯电码的 {嘀、嘀嘀嘀}。当您想处理布尔值(1)表达式或在一个字节(8 位一组)中存储多个值时,将这些字节表示为二进制数会更方便。

二进制数对于构建位掩码(与布尔运算符(AND、OR、XOR、NOT)一起使用)是特别需要的。换句话说,235 是 128+64+32+8+2+1 的和。二进制数看起来很长,但计算机处理起来要容易得多,因为每个二进制数字都可以由一个电信号表示,该信号要么是开(on)要么是关(off)。


128

64

32

16

8

4

2

1

1

1

0

1

0


使用上表,您可以看到十进制数 11010 等于十进制系统中的 26。(16+8+2=26)- 如果您想检查,请使用顶部的基数转换器将 26 转换为二进制。

使用二进制记数法是数值时钟(Numerical Hour)的一个很好的练习,因为原理可以快速教授 - 此外,还可以快速进行一些非常有趣的数学运算 - 例如:

要将任何数字除以二,只需将数字向右移动 1 位:101100 = 44,10110 = 22
(如果存在小数部分会怎样?你能制定一个规则吗?)

要将数字加倍,只需在末尾加一个零:1111 = 15,11110 = 30

我将要讨论的一些重要的二进制运算如下:

  • AND 运算
  • OR 运算
  • 移位运算

我们知道,在二进制中,所有的 1 都表示真,0 都表示假。

当对二进制值执行 AND 运算时,结果如下。

以下是 AND 运算的真值表。


A

B

AND

0(假)

0(假)

0(假)

1(真)

0(假)

0(假)

0(假)

1(真)

0(假)

1(真)

1(真)

1(真)


*当使用 AND 运算时,只有当两个值都为真时,结果才为真。

在 C# 中,使用‘&’运算符来实现 AND 运算。

现在我们来看第一个程序

程序 1

using System;
 
class MyClass {
         public static void Main() {
                
         byte varA=10;// binary equivalent for 10 is 01010
         byte varB=20;// binary equivalent for 20 is 10100
         long result=varA & varB; // AND operation result should be 00000
         Console.WriteLine("{0}  AND  {1} Result :{2}",varA,varB,result);
 
                
         varA=10;// binary equivalent for 10 is 01010
         varB=10;// binary equivalent for 10 is 01010
         result=varA & varB; // AND operation result should be 01010 
         //so the result will contain 10 in decimal
         Console.WriteLine("{0}  AND  {1} Result : {2}",varA,varB,result);
     
         }
}

程序输出

C:\csharp\progs>bitprg1
10  AND  20 Result :0
10  AND  10 Result : 10  

当对二进制值执行 OR 运算时,结果如下。

以下是 AND 运算的真值表。


A

B

或者

0(假)

0(假)

0(假)

1(真)

0(假)

1(真)

0(假)

1(真)

1(真)

1(真)

1(真)

1(真)


*当使用 OR 运算时,只有当两个值都为假时,结果才为假。在所有其他情况下,OR 运算的结果为真。

在 C# 中,使用‘|’运算符来实现 OR 运算。

现在我们来看第一个程序

程序 2

using System;
 
class MyClass {
         public static void Main() {
                
          byte varA=10;// binary equivalent for 10 is 01010
          byte varB=20;// binary equivalent for 20 is 10100
          long result=varA | varB; // OR operation result should be 11110
          //so the result will contain 30 in decimal
          Console.WriteLine("{0}  OR  {1} Result :{2}",varA,varB,result);
 
                
         varA=10;// binary equivalent for 10 is 01010
         varB=10;// binary equivalent for 10 is 01010
         result=varA | varB; // OR operation result should be 01010 
         //so the result will contain 10 in decimal
         Console.WriteLine("{0}  OR  {1} Result : {2}",varA,varB,result);
 
          
         }
}

程序输出

C:\csharp\progs>bitprg2
10  OR  20 Result :30
10  OR  10 Result : 10  

移位运算有两种:右移和左移。

  • 右移运算用于将位向右移动。
  • 左移运算用于将位向左移动。

当对二进制值执行右移运算时,位会向右移动一个位置。

举个例子

十进制值 10 的二进制等效值为 1010。因此,当对该值执行右移运算时,所有位将向右移动一个位置,最右边的位将被截断,最左边的位将用零填充。

1010 右移一位后,其值为 0101

因此,0101 的十进制等效值为 5。这意味着当十进制值 10 向右移动一位时,其值会减小到 5。

在 C# 中,使用‘>>’运算符来实现右移运算。

现在我们来看第一个程序

程序 3

using System;
 
class MyClass {
         public static void Main() {
                
        byte varA=10;// binary equivalent for 10 is 01010
        long result=varA >> 1; // Right Shift operation result should be 0101
        //so the result will contain 5 in decimal
        Console.WriteLine("{0} is Right Shifted to 1 position Result :{1}",
            varA,result);
                   
          }
}

程序输出

C:\csharp\progs>bitprg3
10 is Right Shifted to 1 position Result :5

当对二进制值执行左移运算时,位会向左移动一个位置。

举个例子

十进制值 10 的二进制等效值为 1010。

因此,当对该值执行左移运算时,所有位将向左移动一个位置,最左边的位将被截断,最右边的位将用零填充。1010 向右移动一位后,其值为 10100。

因此,10100 的十进制等效值为 20。这意味着当十进制值 10 向左移动一位时,其值会增加到 20。

在 C# 中,使用‘<<’运算符来实现左移运算。

现在我们来看第一个程序

程序 4

using System;
 
class MyClass {
         public static void Main() {
                
      byte varA=10;// binary equivalent for 10 is 01010
      long result=varA << 1; // Left Shift operation result should be 10100
      //so the result will contain 20 in decimal
     Console.WriteLine("{0} is Left Shifted to 1 position Result :{1}",
            varA,result);
                   
          
         }
}

程序输出

C:\csharp\progs>bitprg4
10 is Left Shifted to 1 position Result :20

深入阅读

  • .NET .NET 技术更多信息
© . All rights reserved.