¿Qué tal:
bit ^= 1;
Esto simplemente XOR del primer bit con 1, que alterna la misma.
Si desea voltear # N bits, a contar desde 0 a la derecha hacia la 7 a la izquierda (de un byte), puede utilizar esta expresión:
bit ^= (1 << N);
esto no va a molestar a cualquier otra los bits, pero si el valor es solamente siempre van a ser 0 o 1 en valor decimal (es decir, todos los demás bits son 0.), entonces la siguiente se pueden utilizar, así:
bit = 1 - bit;
una vez más, si sólo hay va a estar un bit configurado, puede usar el mismo valor para 1 que en el primero para voltear el bit #N:
bit = (1 << N) - bit;
Por supuesto, en ese momento no se está manipulando el bit en el mismo sentido.
La expresión que tiene también está bien, pero de nuevo manipulará todo el valor.
Además, si se hubiera expresado un solo bit como un valor bool
, usted puede hacer esto:
bit = !bit;
que conmuta el valor.
Más de una broma: Por supuesto, la forma "enterprisey" sería utilizar una tabla de búsqueda:
byte[] bitTranslations = new byte[256];
bitTranslations[0] = 1;
bitTranslations[1] = 0;
bit = bitTranslations[bit];
Esto tiene la ventaja de no requerir el primer bit es necesario seleccionar primero, también. –
¡Primero quise usar! pero luego descubrió que es solo para bools. Cosas divertidas, trabajando en este nivel. –
Apoyaría el argumento de 'expresarlo como un bool': dependiendo de lo que esté haciendo, puede hacer que el código sea un poco más fácil de leer para el siguiente tipo que mantenga. – Paddy