[英]Binary representation palindrome in c++
我是位运算符的新手,我试图显示一个数字的回文表示,对于 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;
}
一个可能的解决方案是使用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
如果您使用 GCC,则可以使用其内置函数之一:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.