Скажем, у меня есть целое число, например 10101, я хотел бы отключить третий бит, чтобы получить 10001; если у меня 10001, я все равно получаю 10001; как я могу это достичь?
unset(int i, int j)
int i= 10101 or 10000
int j = 00100
Ответ 1
Предполагая, что вы индексируете биты справа, это должно работать, чтобы отменить определенный бит в value:
int mask = 1 << bitIndex;
value &= ~mask;
Вы можете установить бит с помощью аналогичного кода:
value |= mask;
где mask по-прежнему. (Это предполагает, что индексирование бит начинается с нуля)
Ответ 2
Чтобы очистить или отключить бит
Используйте побитовый оператор И (&), чтобы очистить бит.
number &= ~(1 << x);
Это очистит бит x. Вы должны инвертировать битовую строку с побитовым оператором NOT (~), затем AND it.
ПРИМЕЧАНИЕ: здесь x - позиция бит, начинающаяся от 0 до LSB.
Ответ 3
Если вы имеете дело с литрами, то вы можете просто работать с шестнадцатеричными числами. Преобразование ваших битовых шаблонов в шестнадцатеричные числа:
10101 => 0x15
00100 => 0x04
Таким образом, следующий код C установил бы b на нужный результат.
int a = 0x15;
int b = a & ~( 0x04 );
Если вы хотите что-то общее, у вас может быть функция C (при удалении всей проверки диапазона), например
int clearBit( int value, int bit )
{
// Assume we count bits starting at 1
return value & ~( 1 << (bit -1) );
}
int num = 0b10101;
int mask = 1 << bitPosition;
System.out.println(Integer.toBinaryString(num));
num &= ~mask;
System.out.println(Integer.toBinaryString(num));