在C#中能夠對整型運算對象按位進行邏輯運算。按位進行邏輯運算的意義是:依次取被運算對象的每一個位,進行邏輯運算,每一個位的邏輯運算結果是結果值的每一個位。html
C# 中支持的位操做符號有:spa
運算符號
|
意義
|
運算對象類型
|
運算結果類型
|
對象數
|
實例
|
~
|
按位取反運算
|
整型,字符型
|
整型
|
1
|
~a
|
&
|
位邏輯
與運算
|
2
|
a & b
|
|
|
位邏輯
或運算
|
2
|
a | b
|
^
|
位邏輯
異或運算
|
2
|
a ^ b
|
<<
|
位
左移運算
|
2
|
a<<4
|
>>
|
位
右移運算
|
2
|
a>>2
|
下面詳細介紹每一個位運算的操做。.net
1. 按位取反操做 ~
按位取反操做會將整個變量的全部位都進行取反,包括符號位。code
- class Program
- {
- static void Main(string[] args)
- {
- int number = 5;
- number = ~number;
- Console.WriteLine(number);
-
- int k = -5;
- number = ~k;
- Console.WriteLine(number);
- }
- }
輸出爲:xml
-6htm
4對象
舉例: 在C#中int 類型佔4個字節, 5 的二進制碼爲:blog
- 0000 0000 0000 0000 0000 0000 0000 0101
按位取反後的二進制碼爲:ip
- 1111 1111 1111 1111 1111 1111 1111 1010
這個二進制碼對應內存中存儲的補碼,讓這個二進制碼減去1,獲得表示數字的反碼:內存
- 1111 1111 1111 1111 1111 1111 1111 1001
由這個反碼便可得到源碼,請注意,最左邊的爲符號位,在活的原碼的時候符號位不取反:
- 1000 0000 0000 0000 0000 0000 0000 0110
這個數在內存中即爲 -6。
一樣,-5在內存中的原碼爲:
- 1000 0000 0000 0000 0000 0000 0000 0101
得到反反碼爲:
- 1111 1111 1111 1111 1111 1111 1111 1010
補碼爲:
- 1111 1111 1111 1111 1111 1111 1111 1011
這個補碼按位取反之後爲:
- 0000 0000 0000 0000 0000 0000 0000 0100
在內存中即爲 4.
二、位邏輯與運算 &
注意:符號位一樣參加按位與操做。
位邏輯與運算將兩個運算對象按位進行與運算。與運算的規則:1與1等於1,1與0等於0。
好比:10010001(二進制)&11110000等於10010000(二進制)。
- class Program
- {
- static void Main(string[] args)
- {
- int a = 1;
- int b = 2;
- int c = a & b;
- Console.WriteLine(c);
- }
- }
a 爲:
- 0000 0000 0000 0000 0000 0000 0000 0001
b 爲:
- 0000 0000 0000 0000 0000 0000 0000 0010
按位與之後爲:
- 0000 0000 0000 0000 0000 0000 0000 0000
下面舉例當符號位參與操做的狀況:
- static void Main(string[] args)
- {
- int a = -2147483647;
- int b = 1;
- int c = a & b;
- Console.WriteLine(c);
- }
a:
- <pre class="html" name="code">1000 0000 0000 0000 0000 0000 0000 0001</pre>
- <pre></pre>
- <p>a的原碼爲:</p>
- <pre class="html" name="code">1111 1111 1111 1111 1111 1111 1111 1111</pre>
- <p><br>
- b的二進制:</p>
- <pre class="html" name="code">0000 0000 0000 0000 0000 0000 0000 0001</pre>
- <p><br>
- 按位與之後仍是:</p>
- <pre class="html" name="code">0000 0000 0000 0000 0000 0000 0000 0001</pre>
- <h1 class="html" name="code"><a name="t4"></a><br>
- <br>
- <strong><span>三、</span>位邏輯或運算</strong><span> |</span></h1>
- <p class="html" name="code"><span style="font-size:24px; color:#ff0000">同上,一樣包含符號位操做。</span></p>
- <div>位邏輯或運算將兩個運算對象按位進行或運算。或運算的規則是:1或1等1,1或0等於1,</div>
- <div>0或0等於0。好比10010001(二進制)| 11110000(二進制)等於11110001(二進制)。</div>
- <div> </div>
- <div><pre class="html" name="code"> class Program
- {
- static void Main(string[] args)
- {
- int a = 1;
- int b = 2;
- int c = a | b;
- Console.WriteLine(c);
- }
- }</pre><br>
- <p>a 爲:</p>
- <pre class="html" name="code">0000 0000 0000 0000 0000 0000 0000 0001</pre>
- <p><br>
- b 爲:</p>
- <pre class="html" name="code">0000 0000 0000 0000 0000 0000 0000 0010</pre>
- <p><br>
- 按位與之後爲:</p>
- <pre class="html" name="code">0000 0000 0000 0000 0000 0000 0000 0000</pre>
- <p>a 爲:</p>
- <pre class="html" name="code">0000 0000 0000 0000 0000 0000 0000 0001</pre>
- <p><br>
- b 爲:</p>
- <pre class="html" name="code">0000 0000 0000 0000 0000 0000 0000 0010</pre>
- <p><br>
- 按位或之後爲:</p>
- <pre class="html" name="code">0000 0000 0000 0000 0000 0000 0000 0011</pre></div>
- <p> </p>
- <h1><a name="t5"></a><strong>四、位邏輯異或運算 ^</strong></h1>
- <p><span style="font-size:24px; color:#ff0000">同上,一樣包含符號位操做。</span></p>
- <div>位邏輯異或運算將兩個運算對象按位進行異或運算。異或運算的規則是:1異或1等於0,</div>
- <div>1異或0等於1,0異或0等於0。即:相同得0,相異得1。</div>
- <div>好比:10010001(二進制)^11110000(二進制)等於01100001(二進制)。</div>
- <h1><a name="t6"></a> </h1>
- <h1><a name="t7"></a>五、位左移運算 <<</h1>
- <p><span style="font-size:24px; color:#ff0000">同上,一樣包含符號位操做。</span></p>
- <div>位左移運算將整個數按位左移若干位,左移後空出的部分0。好比:8位的byte型變量</div>
- <div>byte a=0x65(即二進制的01100101),將其左移3位:a<<3的結果是0x27(即二進制的00101000)。</div>
- <div> </div>
- <div><pre class="html" name="code"> static void Main(string[] args)
- {
- int a = -2147483647;
- a = a << 2;
- Console.WriteLine(a);
- }</pre><br>
- </div>
- <div>a 的二進制:</div>
- <div><pre class="html" name="code"><pre class="html" name="code">0000 0000 0000 0000 0000 0000 0000 0100
- </pre>
- <pre></pre>
- 左移兩位之後,符號位丟失:
- <pre></pre>
- </pre></div>
- <div> </div>
- <div><pre class="html" name="code">0000 0000 0000 0000 0000 0000 0000 0100</pre>即爲4.<br>
- </div>
- <div> </div>
- <div> </div>
- <h1><a name="t8"></a>六、位右移運算 >></h1>
- <p> </p>
- <p><span style="font-size:24px; color:#ff0000">同上,一樣包含符號位操做。</span></p>
- <div>位右移運算將整個數按位右移若干位,右移後空出的部分填0。好比:8位的byte型變量</div>
- <div>Byte a=0x65(既(二進制的01100101))將其右移3位:a>>3的結果是0x0c(二進制00001100)。</div>
- <p> </p>
- <p> </p>
- <p> </p>
- <p> </p>
- <pre></pre>