1 条题解
-
0
自动搬运
来自洛谷,原作者为

HenryHuang
单程孤舟,出云入霞,如歌如吟。搬运于
2025-08-24 21:20:56,当前版本为作者最后更新于2017-09-10 21:40:48,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
这道题可以使用位运算。
最开始用模拟做写了30行,但看到老师的代码只有不到10行,······
话不多说,贴代码
这是一条分割线
多年之后回来看自己的题解,觉得不多写点对不起排在第一位,于是重新补了一些内容
位运算
程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。 ——摘自某百科
常用的几种位运算
- 与 (
&)
当两个数在二进制下对应位数上均为 时,得到的结果为 .
- 或 (
|)
当两个数在二进制下对应位数上有一个为 时,得到的结果为 .
- 异或 (
^)
当两个数在二进制下对应位数上不相同时,得到的结果为 .
- 左移 (
<<)
将一个数在二进制下整体向左移位
- 右移 (
>>)
将一个数在二进制下整体向右移位.
举个栗子:
通常情况下,左移一位表示将这个数乘以2,右移一位表示将这个数除以2,向下取整.
然后,对于这份代码,其实所谓的万无一失是不必要的,因为在做左移或者右移的时候,多余的位数就已经自动溢出了,所以可以省略不写.
另外,关于 这样的以 开头的数据,是十六进制表示法,每一位满 进 ,用 ~ 表示.
对于这道题目,我们只需要将原数的后16位前移至新数的前16位,将原数的前16位前移至新数的后16位,这道题目就做完了。
话不多说,贴代码#include<cstdio> #include<iostream> using namespace std; int main() { unsigned long long x; cin>>x; cout<<((x&0x0000ffff)<<16|(x&0xffff0000)>>16)<<endl;//万无一失的做法 } - 与 (
- 1
信息
- ID
- 102
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者