Проблема с перемещением битов в битборде влево в Python - PullRequest
0 голосов
/ 20 февраля 2019

Я программирую в шахматы.Я столкнулся с проблемой, когда хочу переместить биты из king_span влево.Когда я перемещаю биты до 45 мест, все работает нормально.Если я хочу переместить их более чем на 45 мест, полученная битборд остается такой же, как если бы она перемещалась только на 45 мест.Почему они не продвигаются дальше и как я могу решить проблему?Должен ли я сделать второй king_span для этого?

Спасибо за попытку помочь мне.

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

-> Bits don 'двигаться дальше.Следующий битборд должен выглядеть так:

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

1 Ответ

0 голосов
/ 20 февраля 2019

Ваше начальное число 1110000010100000111 - это означает, что у вас есть 19 значащих бит в числе.

Если вы переместите биты на 45 двоичных шагов влево, вы получите число со 45 + 19 = 64 значимымцифры:

<b>1110000010100000111</b>000000000000000000000000000000000000000000000

Если вы переместитесь более чем на 45 шагов, вы получите более 64 цифр.Предположим, вы двигаетесь на 61 шаг;ваш конечный результат будет иметь 80 цифр:

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

Это будет печатать

11100000101000001110000000000000000000000000000000000000000000000000000000000000

Поскольку ваш цикл for печатает только 8 строк из 8 цифр, это означает, что вы печатаете только64 цифрыУ тебя есть больше;В этом примере у вас есть 80 цифр.Остальные цифры просто не печатаются.

...