编写两个函数 unsigned int encrypt(unsigned int num) 和 unsigned int decrypt(unsigned int num),实现对给定的32位无符号整数进行简单的加密和解密操作。
encrypt 函数将每一位的数字进行逆序处理,然后将结果循环左移3位。
decrypt 函数将 encrypt 函数生成的结果循环右移3位,然后再次将每一位的数字进行逆序处理,还原到原始数字。
设计知识有:位运算,for循环,函数
以下是代码演示:
#include <stdio.h>
unsigned int reverse_bits(unsigned int num)
{
int i;
unsigned int result = 0;
for (i=0;i<32;i++)
{
result <<= 1;
result |= (num & 1);//将变量 result 和 (num & 1) 进行按位或操作,结果赋值给result
num >>= 1;//(或num=num>>1 )
}
return result;
}
unsigned int encrypt(unsigned int num)
{
unsigned int reversed = reverse_bits(num);
return (reversed << 3) | (reversed >> (32 - 3));//在二进制中‘左’移3位按位或‘右’移(32-3)位
}
unsigned int decrypt(unsigned int num)
{
unsigned int shifted = (num >> 3) | (num << (32 - 3)); //在二进制中‘右’移3位按位或‘左’移(32-3)位
return reverse_bits(shifted); //转移
}
int main()
{
unsigned int num;
printf("Pleaes enter original numbers:"); //输入初始数值
scanf("%u",&num);
unsigned int encrypted=encrypt(num);
printf("Encrypted number:%u\n",encrypted); //加密数值
unsigned int decrypted=decrypt(encrypted);
printf("Decrypted number:%u\n",decrypted); //解密数值
return 0;
}