Операция обновления битов с использованием битового стиля кодирования
Я хочу обновить бит 5-битных данных независимо от состояния других битов, т.е. каждый бит должен вести себя независимо по отношению к другим битам в 5-битных данных. ниже мой код. Любое предложение будет очень полезно для меня.
case 35:
AtemSwitcher.setTransitionNextTransition(0,(a=00001<<1));
break;
case 36:
AtemSwitcher.setTransitionNextTransition(0,(b=00001<<2));
break;
case 37:
AtemSwitcher.setTransitionNextTransition(0,(c=00001<<3));
break;
case 38:
AtemSwitcher.setTransitionNextTransition(0,(d=00001<<4));
break;
1 ответ
Если вы хотите работать только с определенными битами, вам нужно использовать маскирующие операции с OR, AND и XOR:
Для установки одного бита вам необходимо использовать побитовое ИЛИ:
c = c | (1 << 4);
c |= 1 << 4; //set bit number 4
c |= (1 << 4) | (1 << 3); //set bit 4 and 3
Для установки бита в 0 вам нужно будет использовать побитовое И:
c &= ~(1 << 4); //delete bit 4
Причина, по которой вам также нужен оператор ~, заключается в том, что операция & будет иметь значение 0, если любой из входов равен 0, поэтому вы хотите установить биты, которые хотите очистить, на 0, чтобы в результате они были равны 0,
Вы также можете немного переключиться с использованием побитового XOR:
c ^= (1 << 4); //toggle bit 4