1. 程式人生 > 資訊 >銀河航天系列衛星總指揮:六顆衛星搭載遙感相機,可實現對地成像觀測

銀河航天系列衛星總指揮:六顆衛星搭載遙感相機,可實現對地成像觀測

 

位運算就是基於整數的二進位制表示進行的運算。由於計算機內部就是以二進位制來儲存資料,位運算是相當快的。

基本的位運算共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)

反之>>可看作<<的相反操作

 

..........(待續)