Как отключить определенный бит в целочисленном

Скажем, у меня есть целое число, например 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) );
}

Ответ 4

Вы можете переключить n-й бит

result = number ^ (1 << bitIndex)

Ответ 6

Побитовые функции.

В Java:

int num = 0b10101;
int mask = 1 << bitPosition;

System.out.println(Integer.toBinaryString(num));
num &= ~mask;
System.out.println(Integer.toBinaryString(num));