本文主要是介绍P1100 高低位交换题解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
给出一个小于的非负整数。这个数可以用一个32位的二进制数表示(不足32位用0补足)。我们称这个二进制数的前16位为“高位”,后16位为“低位”。将它的高低位交换,我们可以得到一个新的数。试问这个新的数是多少(用十进制表示)。
例如,数1314520用二进制表示为0000 0000 0001 0100 0000 1110 1101 1000(添加了11个前导0补足为32位),其中前16位为高位,即0000 0000 0001 0100;后16位为低位,即0000 1110 1101 1000。将它的高低位进行交换,我们得到了一个新的二进制数0000 1110 1101 1000 0000 0000 0001 0100。它即是十进制的249036820。
输入输出格式
输入格式
一个小于的非负整数
输出格式
将新的数输出
输入输出样例
输入样例
1314520
输出样例
249036820
解析
左移16位,就是低位转到高位;右移16位,就是高位转到低位;
其中0x0000ffff这样的以0x开头的数据,是十六进制表示法,每一位满16进 11,用0 ~ F表示.
用x&0x0000ffff表示将前16位清0,然后左移16位,接着同样的方式让x&0xffff0000将后16位清0,然后右移16位,两者进行或运算,也就相当于加和。
#include<iostream>
using namespace std;
int main(){unsigned long long x;cin>>x;cout<<((x&0x0000ffff)<<16|(x&0xffff0000)>>16)<<endl;return 0;
}
这篇关于P1100 高低位交换题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!