gpt4 book ai didi

c++ - long int 的位表示未正确打印

转载 作者:太空狗 更新时间:2023-10-29 20:24:47 28 4
gpt4 key购买 nike

我正在尝试打印一个长整数的位表示。我将此变量用作我的国际象棋程序的位板。但是,表示打印不正确。我正在使用以下代码。

void displayBoard()
{

bitset<64>x(fullBoard);
cout<<x<<fullBoard<<endl;
for(int i=0;i<64;i++)
{
if(fullBoard & (1<<i))
{
cout<<"1";
}
else
{
cout<<"0";
}
}

}

前两行使用 bitset 类将其转换为二进制表示形式并打印出来。

但是,当我尝试使用 for 循环中的代码执行相同操作时,它会给出以下输出:
1111111111111111000000000000000111111111111111110000000000000001
正确的输出是:
1111111111111111000000000000000000000000000000001111111111111111

我使用的 fullBoard 的值是:0xFFFF00000000FFFF

我正在使用以下命令使用 C++11 进行编译:g++ board.cpp -std=c++11

为什么这段代码给出了错误的输出?我不认为 for 循环有任何错误。

最佳答案

我觉得问题出在这里:

    if(fullBoard & (1<<i))

这应该是:

    if(fullBoard & (1ULL<<i))

原因是1<<i被评估为一个 int,在你的情况下可能是 32 位,所以它是 UB 一次 i超过 31。使其成为 1ULL<<i强制将表达式计算为 64 位。

关于c++ - long int 的位表示未正确打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26304254/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com