#include <iostream>
#include <vector>
#include <cmath>
#define ll long long
using namespace std;
ll x;
vector<int> to_2_32bit(int x)
{
vector<int> arr(32, 0);
// 使用从高位到低位填充数组
for (int i = 31; i >= 0; --i) {
arr[i] = (x & 1); // 获取当前位的值
x >>= 1; // 将 x 右移 1 位
}
return arr;
}
ll to_digit(vector<int>arr)
{
ll res = 0;
for (int i = 31, j = 0; i >= 0; i--, j++)
{
res += arr[i] * pow(2, j);
}
return res;
}
ll find_x(vector<int>arr)
{
vector<int>x(32, 0);
for (int i = 0; i < 32; i++)
{
if ((0 <= i && i <= 3)
|| (8 <= i && i <= 11)
|| (16 <= i && i <= 19)
|| (24 <= i && i <= 27))
{
x[i] = arr[i];
}
}
return to_digit(x);
}
ll find_e(vector<int>arr)
{
vector<int>x(32, 0);
for (int i = 0; i < 32; i++)
{
if ((12 <= i && i <= 15)
|| (20 <= i && i <= 23)
|| (28 <= i && i <= 32))
{
x[i] = arr[i];
}
}
return to_digit(x);
}
ll find_p(vector<int>arr)
{
vector<int>x(32, 0);
for (int i = 4; i <= 7; i++)
{
x[i] = arr[i];
}
return to_digit(x);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> x;
vector<int>x_2_arr = to_2_32bit(x);
ll x = find_x(x_2_arr), e = find_e(x_2_arr), p = find_p(x_2_arr);
ll aws = x + (e << 8) + (p >> 24);
cout << aws;
return 0;
}
/*
0000 0000 0000 0000 0000 0011 0101 1000
X=0000 0000 0000 0000 0000 0000 0101 0000=80
E=0000 0000 0000 0000 0000 0011 0000 1000=776
P=0000 0000 0000 0000 0000 0000 0000 0000=0
X + E * (256) + (P / 16,777,216)
208 + 1026 * 256
*/
【机试】十进制加密
最新推荐文章于 2026-06-15 20:00:06 发布

1336

被折叠的 条评论
为什么被折叠?



