一、左移運算符
左移運算符(<<)是將一個數的二進位位向左移動指定的位數,並用0在右邊填充結果。例如,10(二進位數1010)左移2位得到40(二進位數101000)。
#include using namespace std; int main() { int a = 10; // 二進位表示為 1010 int b = a << 2; // 左移2位得到 101000,即十進位數40 cout << b << endl; // 輸出40 return 0; }
可以看到,左移運算符可以用於將一個數乘以2的冪。
二、右移運算符
右移運算符(>>)是將一個數的二進位位向右移動指定的位數,並用0或1在左邊填充結果。當數是正數時,使用0填充;當數是負數時,使用1填充。例如,10的二進位位為1010,右移2位得到0010,即十進位數2;-10的二進位位為11110110,右移2位得到11111101,即十進位數-3。
#include using namespace std; int main() { int a = 10; // 二進位表示為 1010 int b = a >> 2; // 右移2位得到 10,即十進位數2 cout << b <> 2; // 右移2位得到 11111101,即十進位數-3 cout << d << endl; // 輸出-3 return 0; }
可以看到,右移運算符可以用於將一個數除以2的冪。
三、位運算與指針運算
位運算符可以用於對數據結構進行操作,例如對數組進行逐位操作。指針運算也可以被看作一種位運算,因為指針變數保存的是內存地址,內存地址又是以二進位形式表示的。
#include using namespace std; int main() { int a[5] = {1,2,3,4,5}; int* p = a; for(int i=0;i<5;i++) { *(p+i) <<= 1; // 每個元素向左移動1位 cout << *(p+i) << " "; // 輸出每個元素 } cout << endl; return 0; }
以上代碼將數組a中的每個元素向左移動1位,並輸出每個元素的值。
四、位運算與加密演算法
使用位運算可以進行簡單的加密演算法,例如異或加密演算法。異或運算符(^)可以在兩個二進位位不同的情況下返回1,相同的情況下返回0。因此,可以將一個數據與一個密鑰進行異或運算,得到密文。只有知道密鑰的人才能將密文還原成原數據。
#include using namespace std; int main() { int data = 1234; // 原數據 int key = 4321; // 密鑰 int cipher = data ^ key; // 對數據進行加密 cout << "Original data: " << data << endl; cout << "Cipher: " << cipher << endl; int plain = cipher ^ key; // 對密文進行解密 cout << "Decrypted data: " << plain << endl; return 0; }
以上代碼演示了一個簡單的異或加密演算法,將數據與密鑰進行異或操作,得到密文,再使用密鑰對密文進行異或操作,得到原數據。可以看到,使用位運算可以進行簡單的加密演算法。
五、自我檢驗
現在,做一個自我檢驗,使用位移運算符編寫一個程序,將一個給定的字元串進行加密,並輸出密文。然後再將密文解密成原字元串。
#include #include using namespace std; int main() { string s = "Hello, world!"; // 原字元串 int key = 123; // 密鑰 string cipher; // 密文 for(int i=0;i<s.length();i++) { char c = s[i] ^ key; // 對每個字元進行加密 cipher += c; // 將加密後的字元加入密文中 } cout << "Original string: " << s << endl; cout << "Cipher: " << cipher << endl; string plain; // 解密後的原字元串 for(int i=0;i<cipher.length();i++) { char c = cipher[i] ^ key; // 對每個字元進行解密 plain += c; // 將解密後的字元加入原字元串中 } cout << "Decrypted string: " << plain << endl; return 0; }
可以看到,以上代碼將一個給定的字元串進行加密,並輸出密文。然後再將密文解密成原字元串。使用位移運算符可以實現簡單的加密演算法和解密演算法。
原創文章,作者:JBIW,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/136588.html