corrimiento - Invertir 1 bit en C#
c# operator (2)
Qué tal si:
bit ^= 1;
Esto simplemente XOR es el primer bit con 1, que lo alterna.
Si desea voltear el bit #N, contando desde 0 a la derecha hacia 7 a la izquierda (para un byte), puede usar esta expresión:
bit ^= (1 << N);
Esto no molestará a otros bits, pero si el valor solo va a ser 0 o 1 en valor decimal (es decir, todos los demás bits son 0), entonces también se puede usar lo siguiente:
bit = 1 - bit;
Nuevamente, si solo se va a establecer un bit, 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 estás haciendo la manipulación de bits en el mismo sentido.
La expresión que tiene también está bien, pero nuevamente manipulará todo el valor.
Además, si hubiera expresado un solo bit como un valor bool
, podría hacer esto:
bit = !bit;
Que cambia 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];
Tengo 1 bit en un byte
(siempre en la posición de orden más bajo) que me gustaría invertir. es decir, dado 00000001 me gustaría obtener 00000000 y con 00000000 me gustaría 00000001.
Lo resolví así:
bit > 0 ? 0 : 1;
Tengo curiosidad por ver de qué otra manera podría hacerse.
Su solución no es correcta porque si bit == 2 (10) su asignación producirá bit == 0 (00).
Esto es lo que quieres:
bit ^= 1;