C#中幾個不常用的操作符

哈哈哈哈哈我撒發表於2009-07-08

加減乘除不用講了,中國人都會;&&,!=,<,>,等也差不多經常用到,今天來看看主要的幾個二進位制計算的操作符:

  
~ 運算子對運算元執行按位求補運算,其效果相當於反轉每一位。按位求補運算子是為 intuintlong 和 ulong 型別預定義的。不用多說例子很重要啊,看了就明白了:

 1 // cs_operator_bitwise_compl.cs
 2 using System;
 3 class MainClass
 4 {
 5     static void Main() 
 6     {
 7         int[] values = { 00x1110xfffff0x88880x22000022};
 8         foreach (int v in values)
 9         {
10             Console.WriteLine("~0x{0:x8} = 0x{1:x8}", v, ~v);
11         }
12     }
13 }

  輸出的結果:

~0x00000000 = 0xffffffff
~0x00000111 = 0xfffffeee
~0x000fffff = 0xfff00000
~0x00008888 = 0xffff7777
~0x22000022 = 0xddffffdd


  & 運算子既可作為一元運算子也可作為二元運算子。

  一元 & 運算子返回運算元的地址(要求 unsafe 上下文)。為整型和 bool 型別預定義了二進位制 & 運算子。對於整型,& 計算運算元的邏輯按位“與”。對於 bool 運算元,& 計算運算元的邏輯“與”;也就是說,當且僅當兩個運算元均為 true 時,結果才為 true。& 運算子計算兩個運算子,與第一個運算元的值無關。

 1 // cs_operator_ampersand.cs
 2 using System;
 3 class MainClass
 4 {
 5     static void Main() 
 6     {
 7         Console.WriteLine(true & false); // logical and
 8         Console.WriteLine(true & true);  // logical and
 9         Console.WriteLine("0x{0:x}"0xf8 & 0x3f);  // bitwise and
10     }
11 }  

 

  輸出結果:

False
True
0x38

  
  二元 運算子是為整型和 bool 型別預定義的。對於整型,| 計算運算元的按位“或”結果。對於 bool 運算元,| 計算運算元的邏輯“或”結果;也就是說,當且僅當兩個運算元均為 false時,結果才為 false

 1 // cs_operator_OR.cs
 2 using System;
 3 class MainClass
 4 {
 5     static void Main() 
 6     {
 7         Console.WriteLine(true | false);  // logical or
 8         Console.WriteLine(false | false); // logical or
 9         Console.WriteLine("0x{0:x}"0xf8 | 0x3f);   // bitwise or
10     }
11 }


  輸出結果:

1 True
2 False
3 0xff

 


  今天先看看這三個操作符,當然他們有~=,&=,|=操作符,大家也知道他們的意思。從上面的三個例子可以看出~按位求補基本上也就是不足16(16進位制)的用F減去自身來替代自身的數字就OK了。int型別的數字在記憶體中為32位,也就是說每一個數字不過32位的前面加0然後求補。對於&比較多的功能,首先它可以是不安全程式碼指標,記憶體地址的引用,不知道是不是這樣說的,其次可以是二進位制的按位與位數上全是1時才為1,其他為0;如果是邏輯與全為true時才為true,其他為false。而對|操作符來說,只要有一個1就為1,只要有一個為true就為true,除非全是0或false時才是0和false。OK有了這些我們就知道怎樣來計算了(在許可權中應用是不錯的)。

 

來源:http://www.cnblogs.com/xdotnet/archive/2007/03/22/oprator_and_or_act.html

相關文章