Diversión de la N bits de computación consejos prácticos

EDITORIAL

Si usted piensa que este artículo útil para recordar el punto de una preocupación y un punto como oh, muchas gracias apoyo.
Para operaciones de bits que no debemos estar familiarizados (Por supuesto, si usted sigue siendo desconocida, se puede ver en antes de escribir artículos sobre la operación de bit , muy detallada), éste es principalmente para los habituales en nuestra vida cotidiana, el encuentro operación de bit en algunos temas, y resumió algunos consejos prácticos que nos pueden ayudar a resolver rápidamente algunos problemas, ayuda a operar la computación Diversión bits. Este artículo se actualizará en el futuro se continuará actualizando se reunió una gran cantidad de fantasía a venir, también actualizaciones de mensajes de bienvenida.

N tira habilidades prácticas

  • La operación de bit, si queremos más a la derecha los bits 1 a 0, sólo tenemos quen & (n-1)

Esto no es realmente difícil de entender, sabemos que, en binario, n - 1dará lugar a nla extrema derecha 1de retirarse 1, ya que tenemos más de una década en decimal, de vuelta de diez un poco. A continuación, esta vez con n & (n-1)computa, se puede eliminar con éxito el más a la derecha1

  • Cálculo de un número entero de 1 binario
    desde 1 puede continuar por x&(x-1)esta operación de borrado, así que cuando el valor se convierte en definitiva 0cuando se determina en el binario 1número

  • Si convertida en un número entero del entero A B, el número de bits requerido para cambiar
    Consideración número entero Aconvertido B, si Ay Ben sus i( 0<=i<32igual en) los bits, no hay necesidad de cambiar el bit es, si un primero ino sea igual al bit, es necesario Bit cambiar esta posición. Por lo tanto A y B se transforma en el número de diferentes bits BIT. Leyenda tiene una operación de bit XOR, es el mismo 0, es diferente 1, el problema entonces transformado en el número de A o B se calcula exclusiva 1número

  • Para examinar la cuestión, un número mayor que un número de lo que significa? O, ¿cómo juzgar un número mayor que un número?

Ya sea en decimal o binario, está el hecho de que acabamos de mirar de arriba hacia abajo, hasta que un poco diferente, el tamaño de la sentencia fuera de él. Decimal, como por ejemplo 6489...y 6486..., ya 9 > 6, así que no importa en qué posición detrás 6489...será mayor que 6486.... Por binario, la misma razón, pero sólo porque el número binario de dos 0y 1por lo que cuando hay un poco más grande que la otra, tiene que ser 1 > 0. La imagen de un poco más abajo,

m -> S S S 0 X X X X
n -> S S S 1 X X X X

Varios delante son los mismos, entonces un poco desde el principio 0para convertirse 1. Con este entendimiento, a veces podemos cambiar el funcionamiento con la realización de muchas ideas ingeniosas.

  • Determinar si el número no es una potencia de dos niños, sólo tenemos que (n & (n - 1))llevar a cabo las operaciones, si el resultado es cero, por lo que es el número dos de potencia

  • La determinación de una serie de paridad, sólo tenemos que i & 1llevar a cabo las operaciones, si el resultado se 1compara con un número par, impar o vice versa

  • El mismo número de dos exclusiva-OR (^) 0

Podemos utilizar esta función para XOR eliminar el número duplicado, por ejemplo, para averiguar el número de una sola matriz de caídas (para un número de número impar), por el contrario, también podemos utilizar esta función para encontrar un conjunto de pares únicos número.

  • Implementado utilizando el número de cambio XOR
a = a ^ b;
b = a ^ b;
a = a ^ b;
  • Usando el desplazamiento implementar una multiplicación / potencia brecha de 2 veces, es decir, al número de un derecho equivalente a un dividido por 2, 2 bits a la derecha de 4, a la izquierda es la multiplicación, la misma regla de adición.
int a = 3>>1; // a =1,注意此除法是整除, 不保留小数位
int a = 3<<1; // a = 6
int a = 3<<2; // a = 12
  • Modulo n-ésima potencia de 2 se puede utilizar m & (n - 1)operaciones, porque, si se trata de 2una potencia, nmosto 000100..., n-1 es 000011...., también lo hacen el resultado del cálculo retenido en los n-m bits de no cero gama
  • Podemos ~n + 1obtener nel número de lo contrario, por supuesto, también se puede escribir como(n ^ -1) + 1
  • Si el golpe if(x == a) x = b, o if(x == b) x = apuede ser reemplazada por talesx = a ^ b ^ x
  • n múltiples finalización, cuando nel 2poder del tiempo, (x + n - 1) & ~(n - 1)encontrarán mayor que el primer xnúmero, y pasa a ser nun múltiplo entero.
  • Cálculo n+1y n-1, -~n == n + 1, ~nsu invertida signo negativo '-' de la misma y luego negados y añaden 1. ~-n == n - 1, La idea es encontrar el bit menos significativo en primer lugar 1, y se niega todos los bits de la poco después también negada, que 01001000se convierte 01000111.
  • El análisis de paridad binario 1
x = x ^ (x >> 1);
x = x ^ (x >> 2);
x = x ^ (x >> 4);
x = x ^ (x >> 8);
x = x ^ (x >> 16);

cout << (x & 1) << endl; // 输出 1 为奇数

número decimal 1.314.520, por ejemplo, su binario 0001 0,100,000,011,101,101 1000 Resultado de la primera operación O exclusiva es la siguiente:

  0001 0100 0000 1110 1101 1000
^ 0000 1010 0000 0111 0110 1100
= 0001 1110 0000 1001 1011 0100

El resultado es un nuevo número binario, en el que el número de la derecha en el i-ésimo bit representa el número de la original tiene un número impar o un número par 1 en el i y i + 1 bits. Por ejemplo, 0 indica que el extremo más a la derecha del número incluso dos números originales de 1, 1 desde la posición de la derecha en la tercera posición indicaría que un número del original anterior tiene una posición extraña número 1. Los resultados de este número un segundo O exclusiva es el siguiente:

  0001 1110 0000 1001 1011 0100
^ 0000 0111 1000 0010 0110 1101
= 0001 1001 1000 1011 1101 1001

El carril 1 indica los resultados de cada una de las tres posiciones en frente de la ubicación y el número del total original de número impar 1, cada uno de un total de un número par de 0 a 1 indica cuatro posiciones correspondientes al número original.

Se ha hecho después de la quinta final XOR, la última parte de la representación binaria obtenida sobre todo el número de 32 bits de paridad 1.

  • Retire el extremo derecho 1
int quyu(int pos){
    return pos & (~pos + 1);
} 

mesa

función Ejemplos la computación bits
Deshacerse del último bit (101101-> 10110) x 1 >>
En el último, más un 0 (101101-> 1.011.010) x << 1
En el último, más un 1 (101101-> 1.011.011) x << 1 + 1
El último bit se establece en 1 (101100-> 101101) x | 1
El último bit es 0 (101101-> 101100) x | 1-1
última negada (101101-> 101100) x ^ 1
El número correcto de la k-ésimo bit se establece en 1 (101001-> 101 101, k = 3) X
El número correcto de la k-ésimo bit es 0 (101101-> 101 001, k = 3) x y ~ (1 << (k-1))
A partir de la inversión de k bits a la derecha (101001-> 101 101, k = 3) x ^ (1 << (k-1))
Tome el extremo de los tres (1101101-> 101) x y 7
Tomado en el final de k bits (1101101-> 1101, k = 5) x y (1 << k-1)
K tomada desde el lugar correcto (1101101-> 1, k = 4) x >> (k-1) y 1
El final de k bits en 1 (101001-> 101 111, k = 4) x | (1 << k-1)
final de inversión de bit K (101001-> 100 110, k = 4) x ^ (1 << k-1)
El derecho a ser continua 0 (100101111-> 100100000) x y (x + 1)
Desde el primer 0 a 1 (100101111-> 100111111) x | (X + 1)
El lado derecho de una continua de 0 a 1 (11011000-> 11011111) x | (X-1)
1 tomar el lado derecho de los sucesivos (100101111-> 1111) (X ^ (x + 1)) >> 1
Sacar de la derecha a la izquierda de la primera (100101000-> 1000) x ^ (x ^ (x-1)) de
Publicados 131 artículos originales · ganado elogios 685 · Vistas 1,19 millones +

Supongo que te gusta

Origin blog.csdn.net/DBC_121/article/details/105175502
Recomendado
Clasificación