繁体   English   中英

C++中的二进制表示回文

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM