一、左移運算符
左移運算符(<<)是將一個數的二進位位向左移動指定的位數,並用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
微信掃一掃
支付寶掃一掃