高低位交换
题目
-
给出一个小于2^32 的正整数。这个数可以用一个32位的二进制数表示(不足32位用0补足)。我们称这个二进制数的前16位为“高位”,后16位为“低位”。将它的高低位交换,我们可以得到一个新的数。试问这个新的数是多少(用十进制表示)。
-
例如,数1314520用二进制表示为00000000000101000000111011011000(添加了11个前导0补足为32位),其中前16位为高位,即0000000000010100;后16位为低位,即0000111011011000。将它的高低位进行交换,我们得到了一个新的二进制数00001110110110000000000000010100。它即是十进制的249036820。
输入
- 一个小于2^{32}2的正整数
输出
- 将新的数输出
输入样例
1314520
输出样例
249036820
解题思路
其实这道题就是一道位运算,包括了<<(向左移)和>>(向右移),根据题目意思可以知道要移16位做出即可.
程序如下
#include<iostream>
#include<cstdio>
using namespace std;
long long n,dy,de;
int main()
{
scanf("%lld",&n);
dy=n>>16;//后面的16位
de=n-(n>>16<<16)<<16;//前面的高位
printf("%lld",dy+de);//加起来
return 0;
}
本文介绍了一个关于位运算的问题,涉及将一个小于2^32的正整数的高位和低位进行交换。通过32位二进制表示,解释了如何通过左移和右移操作实现高低位的互换,并给出了具体的解题思路和示例。
1447

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



