#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 пешек… Я вычисляю, что это … и я сообщаю, какой бит я должен изменить…