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;
}
我已经在纸上解决了问题,似乎确实交换了第一位和最后一位,但我想确定这是我做这件事的最佳方式。
答案 0 :(得分:1)
没有。如果(temp2 << 31)
为temp2
且1
为32位或更窄,则int
会导致未定义的行为。
但是,如果您将所有int
替换为uint32_t
并在0x
的前面拍一个7ffffffe
,那么这似乎是正确的。
答案 1 :(得分:0)
让编译器根据需要创建临时值可能更好。班次数为31时,无需使用&amp;。
uint32_t number;
// ...
number = (number<<31) | (number & 0x7ffffffe) | (number>>31);