欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

洛谷 P1100 高低位交换【位操作】

程序员文章站 2022-07-12 16:09:05
...

题目描述
给出一个小于 2 32 2^{32} 232 的正整数。这个数可以用一个 32 32 32 位的二进制数表示(不足 32 32 32 位用 0 0 0 补足)。我们称这个二进制数的前 16 16 16 位为“高位”,后 16 16 16 位为“低位”。将它的高低位交换,我们可以得到一个新的数。试问这个新的数是多少(用十进制表示)。

例如,数 1314520 1314520 1314520 用二进制表示为 00000000000101000000111011011000 00000000000101000000111011011000 00000000000101000000111011011000(添加了 11 11 11 个前导 0 0 0 补足为 32 32 32 位),其中前 16 16 16 位为高位,即 0000000000010100 0000000000010100 0000000000010100 ;后 16 16 16 位为低位,即 0000111011011000 0000111011011000 0000111011011000 。将它的高低位进行交换,我们得到了一个新的二进制数 00001110110110000000000000010100 00001110110110000000000000010100 00001110110110000000000000010100 。它即是十进制的 249036820 249036820 249036820

输入格式
一个小于 2 32 2^{32} 232 的正整数

输出格式
将新的数输出

输入输出样例
输入 #1

1314520

输出 #1

249036820

解法 位运算

很简单的位运算:

#include <bits/stdc++.h>  
#define ll long long
int main() { 
	ll a;
	scanf("%lld", &a);  
	ll low16 = a & 0xffff, high16 = (a >> 16) & 0xffff; 
	printf("%lld", (ll)(low16 << 16) | high16); 
	return 0;
} 

洛谷 P1100 高低位交换【位操作】

相关标签: 洛谷 位操作