是否可以确定C中64位数字的特定数字

Is it possible to determine specific digits of 64 bit number in C

我正在尝试制作国际象棋引擎。我读过一些书,似乎使用 64 位数字来表示电路板是可行的方法。但是我有点困惑,似乎没有简单的方法可以用二进制写一个数字,而且我也找不到 select 数字中的数字的方法。例如,如果我做

    int aNum = 356;
    b = aNum[1];

有没有办法让我可以将 b 设置为 5?在程序中,它将是一个二进制数,如 1001010101,我想找出所有 1 在我经过那里时的位置。例如,如果我有一个车并且我正在寻找可能的向右移动,我会让它遍历数字直到找到 1.

希望这很容易理解,谢谢!


这个问题是对国际象棋引擎中使用 64 位数字的根本误解。实际上,优点是如果你想检查正方形上的项目,你可以做类似 boardRep & 1 的事情会检查板的第一个正方形上的元素。

如果你想获取 64 位数字的十进制表示中的特定数字(不是我认为你想做的),你首先必须创建该十进制表示。基本配方是这样的:

uint64_t x = 123456789012345;
char buf[30];
snprintf(buf, sizeof(buf), "%lld", x);
int digit5 = buf[5] - '0';
printf("digit [5] = %d\n", digit5);

这应该打印 6.

不过请记住,这不是 64 位数字。 (最大的 64 位数字有 20 个十进制数字。)

也许你想提取个数字n。为此,您需要一些按位运算,可能是这样的:

int bit5 = (x >> 5) & 0x01;
printf("bit 5 = %d\n", bit5);

或者如果你只是想测试这个位,你可以这样做

if(x & (1 << 5)) printf("bit 5 is true\n");

或者您可以预先计算一些位掩码:

unsigned long long int masks[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, /* ... */ };

if(x & masks[5]) printf("bit 5 is true\n");