C++ 仅将整数中的1位移位指定的位数

C++ 仅将整数中的1位移位指定的位数,c++,bit-manipulation,bitboard,C++,Bit Manipulation,Bitboard,我正在创建一个国际象棋程序,对于棋盘表示,我使用的是位棋盘。白色棋子的比特板如下所示: whitePawns=0x000000000000FF00 现在,如果我想移动方块D4上的白色棋子,我必须将第12位移动8或10位,这样它才能进入下一个等级。我想在不干扰其余位位置的情况下移动第12位。我该怎么做 移动whitePawns变量后,应如下所示: whitePawns=0x0000000008F700您可以从旧位置移除1,然后将其置于新位置,而不是移动位 例如,如果您知道位置5处的位已设置,而位置

我正在创建一个国际象棋程序,对于棋盘表示,我使用的是位棋盘。白色棋子的比特板如下所示:

whitePawns=0x000000000000FF00

现在,如果我想移动方块D4上的白色棋子,我必须将第12位移动8或10位,这样它才能进入下一个等级。我想在不干扰其余位位置的情况下移动第12位。我该怎么做

移动whitePawns变量后,应如下所示:


whitePawns=0x0000000008F700

您可以从旧位置移除
1
,然后将其置于新位置,而不是移动位

例如,如果您知道位置5处的位已设置,而位置12处的位未设置,并且您希望将第五位移到第12位,则可以使用单个异或:

whitePawns ^= ((1 << 5) | (1 << 12));

whitePawns^=((1您可以从旧位置移除
1
,而不是移动位,然后将其置于新位置

例如,如果您知道位置5处的位已设置,而位置12处的位未设置,并且您希望将第五位移到第12位,则可以使用单个异或:

whitePawns ^= ((1 << 5) | (1 << 12));

whitePawns^=((1我想你不想移位,你想换成位。试着关闭位a,然后打开位B。类似这样:

whitePawns &= ~(1 << A); // Turn bit A off
whitePawns |= (1 << B);  // Turn bit B on

whitePawns&=~(1我想你不想移位,你想换成位。试着关闭位a,然后打开位B。类似这样:

whitePawns &= ~(1 << A); // Turn bit A off
whitePawns |= (1 << B);  // Turn bit B on

whitePawns&=~(1)你的问题是什么?可能的重复我想在一个整数内移动一个位而不干扰其他位。你的问题是什么?可能的重复我想在一个整数内移动一个位而不干扰其他位。这个解决方案部分接近我的想法。如果我想移动我的棋子的位被设置了怎么办?在这种情况下,我无法交换。我只想将位置中的一个位移到位置B。它必须覆盖位B的值。不管它的值是什么。这个解决方案部分接近我的想法。如果我想将我的典当移动到的位被设置好了怎么办?在这种情况下,我无法交换。我只想将位置中的一个位移到位置B。它哈s覆盖位B的值。不管它的值是什么。如果设置了位置12处的位,这会起作用吗?这种情况下会有什么修改?@RohitShinde如果设置了位置12处的位,这将不起作用,因为
XOR
翻转标记为1的位。如果要将位重置为零,请使用
v&=~(1如果设置了位置12处的位,这会起作用吗?这种情况下的修改是什么?@RohitShinde如果设置了位置12处的位,这将不起作用,因为
XOR
翻转标记为1s的位。如果要将位重置为零,请使用
v&=~(1)