銀河航天系列衛星總指揮:六顆衛星搭載遙感相機,可實現對地成像觀測
位運算就是基於整數的二進位制表示進行的運算。由於計算機內部就是以二進位制來儲存資料,位運算是相當快的。
基本的位運算共6種,分別為按位與(&)、按位或(|)、按位異或(^)、按位取反(~)、左移(<<)和右移(>>)。
與(&)、或(|)、異或(^)
運算 | 運算子 | 數學符號 | 解釋 |
與 | & | &、and | 只有兩個都為1時才為1 |
或 | | | |、or | 只要其中一個為1時就為1 |
異或 | ^ | ^、xor | 只有兩個不同時才為1(異為1,同為0) |
舉例:
&
0010 1101 & 0001 0111 = 0000 0101
|
0010 1101 | 0001 0111 = 0011 1111
^
0010 1101 ^ 0001 0111 = 0011 1010
異或(^)的小技巧
在程式中如果要交換兩數的值,通常的做法是宣告一箇中間變數t來實現交換
如果用^來運算的話則不需要額外宣告中間變數
例如:
int a = 15, b = 17; cout << a << ' ' << b << endl; a ^= b; b ^= a; a ^= b; cout << a << ' ' << b << endl; 輸出結果: 15 17 17 15 此外,一個變數對同一個數異或兩次變數的值還是原來的值 例如: int a = 15, b = 17; cout << a << ' ' << b << endl; a ^= b; a ^= b; cout << a << ' ' << b << endl;輸出:
15 17
15 17
取反(~)
顧名思義,在二進位制中取反就是0變成1,1變成0
例:~0010 1011 = 1101 0100
左移(<<)、右移(>>)
num << i
表示將 num 的二進位制表示向左移動 i 位所得的值。
num >> i
表示將 num 的二進位制表示向右移動 i 位所得的值
舉例:
0001 0110 << 2 = 0101 1000
0001 0110 >>2 = 0000 0101
num<<i 可以看作是把num乘2的i次冪倍(在不超過指定範圍內)
如15<<1 結果為30(15*2) 15<<2 結果為60(15*4)
反之>>可看作<<的相反操作
..........(待續)
位運算就是基於整數的二進位制表示進行的運算。由於計算機內部就是以二進位制來儲存資料,位運算是相當快的。
基本的位運算共6種,分別為按位與(&)、按位或(|)、按位異或(^)、按位取反(~)、左移(<<)和右移(>>)。
與(&)、或(|)、異或(^)
運算 | 運算子 | 數學符號 | 解釋 |
與 | & | &、and | 只有兩個都為1時才為1 |
或 | | | |、or | 只要其中一個為1時就為1 |
異或 | ^ | ^、xor | 只有兩個不同時才為1(異為1,同為0) |
舉例:
&
0010 1101 & 0001 0111 = 0000 0101
|
0010 1101 | 0001 0111 = 0011 1111
^
0010 1101 ^ 0001 0111 = 0011 1010
異或(^)的小技巧
在程式中如果要交換兩數的值,通常的做法是宣告一箇中間變數t來實現交換
如果用^來運算的話則不需要額外宣告中間變數
例如:
int a = 15, b = 17; cout << a << ' ' << b << endl; a ^= b; b ^= a; a ^= b; cout << a << ' ' << b << endl; 輸出結果: 15 17 17 15 此外,一個變數對同一個數異或兩次變數的值還是原來的值 例如: int a = 15, b = 17; cout << a << ' ' << b << endl; a ^= b; a ^= b; cout << a << ' ' << b << endl;輸出:
15 17
15 17
取反(~)
顧名思義,在二進位制中取反就是0變成1,1變成0
例:~0010 1011 = 1101 0100
左移(<<)、右移(>>)
num << i
表示將 num 的二進位制表示向左移動 i 位所得的值。
num >> i
表示將 num 的二進位制表示向右移動 i 位所得的值
舉例:
0001 0110 << 2 = 0101 1000
0001 0110 >>2 = 0000 0101
num<<i 可以看作是把num乘2的i次冪倍(在不超過指定範圍內)
如15<<1 結果為30(15*2) 15<<2 結果為60(15*4)
反之>>可看作<<的相反操作
..........(待續)