至於為什麼會有&和|運算子。是因為這兩個運算子可以用於對數值執行操作。實際上,它們處理的是儲存在變數中的一系列位,而不是變數的值。
下面先討論&,第乙個運算元中的每個位都與第二個運算元相同位置上的位進行比較,在得到結果中,各個位置上的位如下所示:
運算元1的位:1100
運算元2的位:1010
&的結果位: 1000
|運算子與此類似,但得到的結果是不同的,如下所示:
運算元1的位:1100
運算元2的位:1010
&的結果位: 1110
例如,考慮下面**中的操作:
int result,op1,op2;
op1 = 4;
op2 = 5;
result = op1 & op2;
這裡必須考慮op1和op2的二進位制表示方式,它們分別是100和101。比較這兩個表達方式中相同位置上的二進位制數字,得出結果,如下所示:
*如果op1和op2最左邊的位都是1,result最左邊的位就是1,否則為0。
*如果op1和op2次左邊的位都是1,result次左邊的位就是1,否則為0。
*繼續比較其他位。
在這個示例中,op1和op2最左邊的位都是1,所以result最左邊的位就是1。下乙個位都是0,第三個位置上的位分別是1和0,則result第2~3個位都是0。最後,結果的二進位制值是100,即結果是4。以下是這個過程:
&:100 &4
101 &5
100 &4
如果使用|運算子,將進行相同的過程,但如果運算元中相同位置上的位有乙個是1,其結果位就是1,如下所示:
|:100 |4
101 |5
101 |5
^運算子的用法與此相同。如果運算元中相同位置上的位有且只有乙個是1,其結果為就是1,如下所示:
運算元1的位:1100
運算元2的位:1010
^的結果位: 0110
c#中還可以使用一元位運算子~,它將運算元中的位取反,其結果是運算元中位為1的,在結果中就是0,反之亦然:
運算元的位:10
~的結果位:01
除了這4個位運算子外,還有另外兩個運算子,如下所示:
>>:var1 = var2>>3 把var2的二進位制值向右移動var3位,就得到var1的值。
<<:var1 = var2<<3 把var2的二進位制值向左移動var3位,就得到var1的值。
這些運算子通常稱為位移運算子,最好舉例說明:
int var1,var2 = 10,var3 = 2;
var1 = var2 << var3;
結果,var1的值是40。具體過程如下:10的二進位制是1010,把該數向左移動兩位,得到101000,即十進位制中的40。實際上,是執行了多個操作。每向左移動一位,該數都要乘以2,所以向左移動兩位,就是給原來的運算元乘以4。而每向右移動一位,則是給運算元除以2並丟棄餘數。
int var1,var2 = 10;
var1 = var2 >> 1;
var1的值是5,下下面的**得到的值是2:
int var1,var2 = 10;
var1 = var2 >> 2;
運算子及流程控制
運算子 c語言提供一種操作的符號來計算 運算子表示式 由運算元和運算子組成的表示式 表示式結果 計算的結果 1 算術運算子 算數運算子表示式 算術結果 2 賦值運算子 左值 右值 左值必須有變數 1 溢位 大空間賦值給小空間 short in 2 不轉換型別 int float 只會整數間的賦值 f...
運算子和流程控制
python3中只有乙個input python2中的raw input與python3中的input一模一樣 python3中的input 要求輸入者必須輸入乙個明確的資料型別 輸入什麼型別就存成什麼型別 1.運算子 算術運算 int,float 數字型別 取整 取餘賦值運算子 age 18 ag...
運算子和流程控制
目錄算數運算子 取餘 自加1 自減1需要注意的是 var a 10 var b a 先賦值再自加 console.log b 10 console.log a 11 var c b 先自加再賦值 console.log b 11 console.log c 11比較運算子 全等 不全等1 1 fal...