我是按位运算符的新手,我试图显示数字的回文表示,对于n = 32(0010 0000),它应输出4(0000 0100)但它给出的值我是随机的,例如对于上面的输入,而不是4,我得到2,如果我尝试3(00000011)它不会给我192 11000000 ...它给了我6(0000 0110)和所以...我确定代码是错的,我只是想知道在哪里。顺便说一句,我已经检查了其他帖子,但是我没想到它
#include <iostream>
using namespace std;
int main ()
{
int n,k;
cout<<"Dati n: ";cin>>n;
while(n>0){
k=k<<1;
if(n & 1 == 1)
k |= 1<<1;
n=n>>1U;
}
cout<<k;
}
答案 0 :(得分:0)
可能的解决方案是使用std::bitset
:
std::bitset<8> bs(3); // 0000 0011
std::string palindrome = bs.to_string(); // "0000 0011"
// reverse the string representation
std::reverse(palindrome.begin(), palindrome.end()); // "1100 0000"
std::cout << bs.to_ulong() << std::endl;
std::cout << std::bitset<8>(palindrome).to_ulong();
给出这个结果:
3
192
答案 1 :(得分:-1)
如果您使用的是GCC,则可以使用其中一个builtin functions:
uint32_t palindrome( uint32_t num ) {
return __builtin_bswap32(num);
}
palindrome(2U)
将返回33554432(0x2000000)
优点是编译器将使用处理器中的二进制交换指令(如果可用)。对于x86_64,例如:
palindrome(unsigned int):
mov eax, edi
bswap eax
ret