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

C++ c+中的二进制表示回文+;,c++,bit-manipulation,palindrome,C++,Bit Manipulation,Palindrome,我是位运算符新手,我正在尝试显示一个数字的回文表示,对于n=32(0010 0000),它应该输出4(0000 0100),但它给我的值是随机的,例如,对于上面的输入,我得到的不是4,而是2,如果我尝试3(00000011),它不会给我192 11000000…它给我6(0000 0110)等等我肯定密码是错的,我只是想知道在哪里。顺便说一句,我查过其他帖子,但我想不出来 #include <iostream> using namespace std; int main () {

我是位运算符新手,我正在尝试显示一个数字的回文表示,对于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;
int main()
{
int n,k;
coutn;
而(n>0){

k=k如果您使用的是GCC,您可以使用它的一个:

回文(2U)
将返回33554432(0x2000000)

优点是编译器将在处理器中使用二进制交换指令(如果可用)。例如,对于x86_64:

palindrome(unsigned int):
  mov eax, edi
  bswap eax
  ret

一种可能的解决方案是使用:


当然,打印的值是随机的。
k=krember未初始化的局部变量(如您的变量
k
)将具有不确定的(似乎是随机的)值。使用未初始化变量导致C++中未定义的行为。我的代码不执行它应该做的,它输出随机值<代码> K =1@AnghelAlexandru1)你的程序完全按照你告诉它的去做。如果你对一个算法不确定,在将它转换成代码之前,用钢笔和纸解决它。如果你的代码不执行,那么正确的事情-使用调试器逐步检查代码,找出原因。2)您的示例仍然没有更新此类信息。因此,从我们的角度来看,问题仍然存在。我理解您的代码,但我的代码需要为从keyboard@AnghelAlexandru,也有可能,只需将第一行的3替换为您的N来自键盘。我需要为此添加库吗?它无法识别位集operation@AnghelAlexandru“代码> >包含< <代码> > AnghelAlexandru,您需要<代码>,< /COD> >我使用DEV C++,我不知道它是否有GCC编译器,因为它没有登记我的函数为“UTI32”。交换字节的类型。交换字节不会产生按位“回文”。尽管如此,OP甚至不寻找回文,而是按位反转。
palindrome(unsigned int):
  mov eax, edi
  bswap eax
  ret
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