由於剛進公司沒多久和同事們共同開發一個項目,回到家裡也沒沒怎麼學習,也不知道要寫點什嗎?安裝了VISTA,在有些功能上還不懂的用,今天無聊中想起了一些操作符,但是真的忘記了它是怎麼算的了。看了一下感覺感覺,本文大部分內容和例子來自於MSDN,只是為了你後好找把它弄過啦,由於我還沒有裝MSDN上線上的很慢鬱悶。
加減乘除不用講了,中國人都會;&&,!=,<,>,等也差不多經常用到,今天來看看主要的幾個二進位計算的操作符:
~ 運算子對運算元執行按位求補運算,其效果相當於反轉每一位。按位求補運算子是為 int、uint、long 和 ulong 類型預定義的。不用多說例子很重要啊,看了就明白了: 1 // cs_operator_bitwise_compl.cs
2 using System;
3 class MainClass
4 {
5 static void Main()
6 {
7 int[] values = { 0, 0x111, 0xfffff, 0x8888, 0x22000022};
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有了這些我們就知道怎樣來計算了(在許可權中應用是不錯的)。