一、左移运算符
左移运算符(<<)是将一个数的二进制位向左移动指定的位数,并用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
微信扫一扫
支付宝扫一扫