高低位交换

题目描述

给出一个小于 2^32的非负整数。这个数可以用一个 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。

 输入格式

一个小于 2^32的非负整数

输出格式

将新的数输出

样例 

样例输入 1
1314520

 样例输出 1

249036820

位运算符用于对二进制数进行操作。以下是C++中常用的位运算符的总结:

  1. 按位与(AND):&

    • 规则:当两个相应的二进位都为1时,结果位为1,否则为0。
    • 例子:5 & 3 的结果是 1,因为 101 & 011 等于 001
  2. 按位或(OR):|

    • 规则:当两个相应的二进位至少有一个为1时,结果位为1,否则为0。
    • 例子:5 | 3 的结果是 7,因为 101 | 011 等于 111
  3. 按位异或(XOR):^

    • 规则:当两个相应的二进位不相同时,结果位为1,否则为0。
    • 例子:5 ^ 3 的结果是 6,因为 101 ^ 011 等于 110
  4. 按位取反(NOT):~

    • 规则:将操作数的每个二进位取反。
    • 例子:~5 的结果是 -6,因为 ~101 等于 -110(在补码表示中)。
  5. 左移(Left Shift):<<

    • 规则:将操作数的二进位向左移动指定的位数,右边空出的位用0填充。
    • 例子:5 << 2 的结果是 20,因为 101 << 2 等于 10100
  6. 右移(Right Shift):>>

    • 规则:将操作数的二进位向右移动指定的位数,左边空出的位根据原操作数的符号位填充(正数填充0,负数填充1)。
    • 例子:5 >> 2 的结果是 1,因为 101 >> 2 等于 1
  7. 无符号右移(Unsigned Right Shift):>>>

    • 规则:将操作数的二进位向右移动指定的位数,左边空出的位总是用0填充。
    • 例子:5 >>> 2 的结果是 1,与 5 >> 2 相同。

位运算符通常用于底层编程、优化代码、加密算法、图形处理等领域,因为它们比标准的算术运算更快,并且可以直接操作内存中的原始数据。

#include <iostream> // 引入输入输出流库
using namespace std; // 使用标准命名空间

int main() { // 主函数
    unsigned int num; // 定义一个无符号整数变量num
    cin >> num; // 从输入流中读取一个整数并存储到num中

    unsigned int high = (num >> 16) & 0xFFFF; // 将num右移16位,并与0xFFFF进行按位与操作,获取高位
    unsigned int low = num & 0xFFFF; // 将num与0xFFFF进行按位与操作,获取低位

    unsigned int new_num = (low << 16) | high; // 将低位左移16位,然后与高位进行按位或操作,交换高低位

    cout << new_num << endl; // 输出交换后的整数

    return 0; // 返回0,表示程序正常结束
}

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值