这个C ++代码是否交换了第一位和最后一位?

时间:2015-12-11 08:06:57

标签: c++ bit-shift

void Tools::Swap(uint32_t number){
    int temp1 = (number >> 31) & 1;
    int temp2 = number & 1;
    int ans = number & 7ffffffe;
    int mask = (temp2 << 31) | temp1;
    ans = ans | mask;
    cout << ans << endl;
}

我已经在纸上解决了问题,似乎确实交换了第一位和最后一位,但我想确定这是我做这件事的最佳方式。

2 个答案:

答案 0 :(得分:1)

没有。如果(temp2 << 31)temp21为32位或更窄,则int会导致未定义的行为。

但是,如果您将所有int替换为uint32_t并在0x的前面拍一个7ffffffe,那么这似乎是正确的。

答案 1 :(得分:0)

让编译器根据需要创建临时值可能更好。班次数为31时,无需使用&amp;。

uint32_t number;
    // ...
    number = (number<<31) | (number & 0x7ffffffe) | (number>>31);