Description 对一个整数(32位无符号整数)进行规则如下的加密:1.低16位和高16位互换2.此时的低16位按位取反3.此时的高16位与低16位进行异或运算,结果存储到高16位现在根据加密后的整数,求出加
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/09 10:15:37
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);
}
看看这个吧,能得到正确的结果: