Преобразование в Dame работает, но захваченный не работает … почему?

#java #bit

#java #бит

Вопрос:

Я определил целое long число:

 static long white1 = 0b101001011101001001101000110101000100101000010101000000L;
static long white2 = 0b101010110101010100101010010101010000101001111101001101L;
static long black1 = 0b100110010100110000100101111100101101100101011100101001L;
static long black2 = 0b100111111100111101100111011100111001100110110100110100L;
 

Состояние игры:

 static Long[] state = { white1, white2, black1, black2 };
 

У каждого из белых и черных есть код 6 пешек.
Я не могу использовать таблицу std для генерации шашек.

Если я перейду к pos x, 7 или x,0, я преобразую pawn в dame:

 static void updateDame(byte n) {
    long apos = 1 << (n % 6) * 9   7;
    state[n / 6] = state[n / 6]   apos;
}
 

и это работает.
но

 static void updateCaptured(byte n) {
    long apos = 0 << (n % 6) * 9   8;
    state[n / 6] = state[n / 6]   apos;
}
 

Все еще не работает… Мне нужно изменить 9. бит на 0 с 1.
Если я изменю 0 на 1 (например, dame), это сработает.

Если я попробую 1 (1 1 — это 10 в двоичном формате), это не сработает — захвачен рядом с пешкой… Как я могу это изменить?

Ответ №1:

     long apos = 0 << (n % 6) * 9   8;
 

Ноль, сдвинутый влево, по-прежнему равен нулю.

Комментарии:

1. но теперь его 1… я пытаюсь преобразовать 1 в 0 .. я пытаюсь ~ 1 или « длинная маска 0b100000000; apos = 1 ^ маска << (n%6) * 9 8… « но не работает… как это исправить?

2. Вы пытаетесь установить или очистить биты? Тогда соответствующими операциями являются «или» для установки», а не «для очистки». state = state | bit , state amp; ~bit . Или более кратко, state |= bit , state amp;= ~bit .

3. я пытаюсь « state [n / 6] amp;= ~ apos;« но не работает

4. Ну, вот как вы немного очищаете. В этом нет сомнений. Чего вы на самом деле пытаетесь достичь? Откуда берется таинственное n / 6 значение? Почему вы state все равно очищаете биты?

5. состояние [] строится из 4 длинных… white1, white2, black1, black2 … в 1 длинном коде 6 пешек… Я вычисляю, что это … и я сообщаю, какой бит я должен изменить…