在Python中将位板中的位向左移动时出现问题

2024-09-29 18:46:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编程一个国际象棋人工智能。当我想把钻头从特大跨度移到左边时,遇到了一个问题。当我把钻头移动到45个位置时,效果很好。如果我想移动它们超过45个位置,输出的位板是一样的,好像它只移动了45个位置。为什么它不把它们移得更远,我怎么可能解决这个问题呢?我要再做一次吗?你知道吗

谢谢你帮我。你知道吗

king_span = int("0000000000000000000000000000000000000000000001110000010100000111", 2)

def print_bitboard(bitboard):
    board = '{:064b}'.format(bitboard)
    for i in range(8):
        print(board[8 * i + 0] + " " + board[8 * i + 1] + " " + board[8 * i + 2] + " " + board[8 * i + 3] + " " + board[
            8 * i + 4] + " " + board[8 * i + 5] + " " + board[8 * i + 6] + " " + board[8 * i + 7])




print_bitboard(king_span << 45)

输出:

1 1 1 0 0 0 0 0
1 0 1 0 0 0 0 0
1 1 1 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

-->;位不会再移动。下一个位板应如下所示:

1 1 0 0 0 0 0 0--> this bit gets deleted to zero
0 1 0 0 0 0 0 0--> this bit gets deleted to zero too
1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

Tags: toboard编程bitthis国际象棋spanprint
1条回答
网友
1楼 · 发布于 2024-09-29 18:46:42

您的初始数字是1110000010100000111——这意味着您的数字中有19个有效位。你知道吗

当您将位移到左边45个二进制步骤时,您将得到一个具有45 + 19 = 64有效数字的数字:

1110000010100000111000000000000000000000000000000000000000000000

如果你移动超过45步,你将得到超过64位数字。假设移动61步;最终结果将有80位数字:

 new_number = king_span << 61
 print('{:b}'.format(new_number))

会打印出来的

11100000101000001110000000000000000000000000000000000000000000000000000000000000

因为您的for循环只打印8行8位数字,这意味着您只打印64位数字。你有更多;在这个例子中你有80个数字。剩下的数字没有打印出来。你知道吗

相关问题 更多 >

    热门问题