Description 对一个整数(32位无符号整数)进行规则如下的加密:1.低16位和高16位互换2.此时的低16位按位取反3.此时的高16位与低16位进行异或运算,结果存储到高16位现在根据加密后的整数,求出加
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/30 08:37:12
![Description 对一个整数(32位无符号整数)进行规则如下的加密:1.低16位和高16位互换2.此时的低16位按位取反3.此时的高16位与低16位进行异或运算,结果存储到高16位现在根据加密后的整数,求出加](/uploads/image/z/1378347-51-7.jpg?t=Description+%E5%AF%B9%E4%B8%80%E4%B8%AA%E6%95%B4%E6%95%B0%2832%E4%BD%8D%E6%97%A0%E7%AC%A6%E5%8F%B7%E6%95%B4%E6%95%B0%29%E8%BF%9B%E8%A1%8C%E8%A7%84%E5%88%99%E5%A6%82%E4%B8%8B%E7%9A%84%E5%8A%A0%E5%AF%86%EF%BC%9A1.%E4%BD%8E16%E4%BD%8D%E5%92%8C%E9%AB%9816%E4%BD%8D%E4%BA%92%E6%8D%A22.%E6%AD%A4%E6%97%B6%E7%9A%84%E4%BD%8E16%E4%BD%8D%E6%8C%89%E4%BD%8D%E5%8F%96%E5%8F%8D3.%E6%AD%A4%E6%97%B6%E7%9A%84%E9%AB%9816%E4%BD%8D%E4%B8%8E%E4%BD%8E16%E4%BD%8D%E8%BF%9B%E8%A1%8C%E5%BC%82%E6%88%96%E8%BF%90%E7%AE%97%2C%E7%BB%93%E6%9E%9C%E5%AD%98%E5%82%A8%E5%88%B0%E9%AB%9816%E4%BD%8D%E7%8E%B0%E5%9C%A8%E6%A0%B9%E6%8D%AE%E5%8A%A0%E5%AF%86%E5%90%8E%E7%9A%84%E6%95%B4%E6%95%B0%2C%E6%B1%82%E5%87%BA%E5%8A%A0)
Description 对一个整数(32位无符号整数)进行规则如下的加密:1.低16位和高16位互换2.此时的低16位按位取反3.此时的高16位与低16位进行异或运算,结果存储到高16位现在根据加密后的整数,求出加
Description
对一个整数(32位无符号整数)进行规则如下的加密:
1.低16位和高16位互换
2.此时的低16位按位取反
3.此时的高16位与低16位进行异或运算,结果存储到高16位
现在根据加密后的整数,求出加密前的整数的16进制形式.
Input
输入有多case,每个case一行,且只有一个整数
Output
对于每个case输出一个整数(16进制形式),即加密前的整数.
Sample Input
4294901759
Sample Output
1
hint:十六进制输出时请使用大写字母(A,B...)
Description 对一个整数(32位无符号整数)进行规则如下的加密:1.低16位和高16位互换2.此时的低16位按位取反3.此时的高16位与低16位进行异或运算,结果存储到高16位现在根据加密后的整数,求出加
#include "stdio.h"
int main() {
unsigned long a, a_H, a_L, temp, result;
unsigned long test_H, test_L;
scanf("%lu", &a);
// 求出高低16位
a_H = (a & 0xffff0000) >> 16;
a_L = a & 0x0000ffff;
// 求高16位
a_H = a_H ^ a_L;
// 求低16位
a_L = a_L ^ 0x0000ffff;
// 高低位互换
temp = a_L;
a_L = a_H;
a_H = temp;
// 高低位合并
a_H = a_H << 16;
result = a_H + a_L;
printf("%lu", result);
}
看看这个吧,能得到正确的结果: