一、左移运算符
左移运算符(<<)是将一个数的二进制位向左移动指定的位数,并用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/n/136588.html