1 条题解

  • 0
    @ 2026-8-5 14:01:01

    题解:交换32位整数的高低半区

    思路

    • N & 0xFFFFu 取出低 1616 位,再左移 1616 位;
    • N >> 16 取出高 1616 位;
    • 两部分按位或合并。

    公式:

    ans = ((N & 0xFFFFu) << 16) | (N >> 16);
    

    必须使用无符号 3232 位整数,避免符号位和右移规则干扰结果。

    复杂度

    时间复杂度 O(1)O(1),空间复杂度 O(1)O(1)

    参考代码

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        uint32_t n;
        cin >> n;
        uint32_t ans = ((n & 0xFFFFu) << 16) | (n >> 16);
        cout << ans << "\n";
        return 0;
    }
    

    信息

    ID
    5116
    时间
    1000ms
    内存
    128MiB
    难度
    9
    标签
    递交数
    13
    已通过
    4
    上传者