程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#的位操作符

C#的位操作符

編輯:關於C#

我們知道,任何信息在計算機中都是以二進制的形式保存的。位操作符就是對數據按二進制進行運算的操作符。C#語言中的位操作符有:

● & 與

● | 或

● ^ 異或

● ~ 取補

● << 左移

● >> 右移

其中,取補只有一個操作數,而其它的位操作符都有兩個操作數。這些運算都不會產生溢出。位操作符的操作數為整型或者是可以轉換為整型的任何其它類型。

與運算

操作數按二進制進行與運算,運算規則為:

0&0=0
0&1=0
1&0=0
1&1=1
這說明,除了兩個位均為1,與運算結果為1,其它任何情況下與運算結果均為0。比如,2和10進行與運算:

2的二進制表示: 00000010

10的二進制表示:00001010

與運算結果: 00000010

所以,2&10的結果為2。

或運算

操作數按二進制位進行或運算,運算規則為:

0|0=0
0|1=1
1|0=1
1|1=1
這說明,除了兩個位均為0,或運算結果為0,其它情況下或運算結果均為1。比如,2和10進行或運算:

2的二進制表示: 00000010

10的二進制表示:00001010

或運算結果: 00001010

所以,2|10的結果為10。

異或運算

操作數按二進制位進行異或運算,運算規則為:

0^0=0
0^1=0
1^0=0
1^1=1
這說明,當兩個位相同時,異或運算結果為0;不相同時異或運算結果為1。比如,2和10進行異或運算:
 

2的二進制表示: 00000010

10的二進制表示:00001010

異或運算結果: 00001000

所以,2^10的結果為8。

取補運算

取補運算對操作數的每一位取補,如對10取補結果為:

10的二進制表示:00001010

取補運算結果:11110101

這個二進制對應的具體值與數據類型有關,下面的例子清楚地說明了這一點。

程序清單7-5:

using System;
class Test
{
  public static void Main(){
    short a=10;
    ushort b=10;
    int c=10;
    uint d=10;
    Console.WriteLine(~10);
    Console.WriteLine("short:{0}",~a);
    Console.WriteLine("ushort:{0}",~b);
    Console.WriteLine("int:{0}",~c);
    Console.WriteLine("uint:{0}",~d);
  }
}

正確的輸出是:

-11
short:-11
ushort:-11
int:-11
uint:4294967285

移位運算

左移運算將操作數按位左移,高位被丟棄,低位順序補0。比如10的二進制為00001010,左移一位為00010100(20),左移二位為00101000(40)。

右移運算時,如果操作數x是int或long型時,x的低位被丟棄,其它各位順序依次右移,如果x是非負數,最高位設成零;如果x為負數,則最高位設為1。而當x的類型為uint或ulong型時,x的低位將被丟棄,其它各位順序依次右移,高位設為0。比如:

程序清單7-6:

using System;

class Test
{
  public static void Main(){
    int x=16;
    Console.WriteLine(x);
    int y=x>>2;
    Console.WriteLine(y);
    y=y>>2;
    Console.WriteLine(y);
    y=y>>2;
    Console.WriteLine(y);
  }
}

上面這段程序的輸出為:

16
4
1
0
如果把上面x的初始值設為-16,則程序的輸出為:

-16
-4
-1
-1

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved