Ventanas.  virus  Cuadernos.  Internet.  oficina.  Utilidades.  Conductores

En este artículo, lo explicaré cómo funcionan las operaciones de bits. A simple vista pueden parecerte algo complicado e inútil, pero en realidad no lo es tanto. Esto es lo que intentaré convencerte.

Introducción

Los operadores bit a bit operan directamente en los bits de un número, por lo que los números en los ejemplos estarán en binario.

Cubriré los siguientes operadores bit a bit:

  • | (O bit a bit O (O)),
  • & (Bitbit Y (Y)),
  • ^ (O exclusivo (XOR)),
  • ~ (negación bit a bit (NO)),
  • << (Побитовый сдвиг влево),
  • >> (desplazamiento a la derecha bit a bit).

Las operaciones de bits se estudian en matemáticas discretas y también son la base de la tecnología digital, ya que se basan en la lógica del funcionamiento de las puertas lógicas: los elementos básicos. circuitos digitales. En matemáticas discretas, como en la tecnología digital, se utilizan tablas de verdad para describir su funcionamiento. Me parece que las tablas de verdad facilitan enormemente la comprensión de las operaciones bit a bit, por lo que las proporcionaré en este artículo. Sin embargo, casi nunca se usan en explicaciones de operadores bit a bit en lenguajes de programación de alto nivel.

También necesita saber acerca de los operadores bit a bit:

  1. Algunos operadores bit a bit son similares a los operadores con los que probablemente esté familiarizado (&&, ||). Esto se debe a que en realidad son algo similares. Sin embargo, nunca deben confundirse.
  2. La mayoría de las operaciones bit a bit son operaciones de asignación compuestas.

Bit a bit O (O)

Bitwise OR es equivalente a OR lógico, pero se aplica a cada par de bits de un número binario. El dígito binario del resultado es 0 solo cuando ambos bits correspondientes en B son 0. En todos los demás casos, el resultado binario es 1. Es decir, si tenemos la siguiente tabla de verdad:

38 | 53 será así:

A 0 0 1 0 0 1 1 0
B 0 0 1 1 0 1 0 1
un | B 0 0 1 1 0 1 1 1

Como resultado, obtenemos 110111 2 o 55 10 .

Bit a bit Y (Y)

AND bit a bit es algo así como lo contrario de OR bit a bit. El dígito binario del resultado es 1 solo cuando ambos bits correspondientes de los operandos son 1. En otras palabras, podemos decir que los dígitos binarios del número resultante son el resultado de multiplicar los bits correspondientes del operando: 1x1 \u003d 1 , 1x0 \u003d 0. La siguiente tabla de verdad corresponde al AND bit a bit:

Un ejemplo de la operación de AND bit a bit en la expresión 38 y 53:

A 0 0 1 0 0 1 1 0
B 0 0 1 1 0 1 0 1
A&B 0 0 1 0 0 1 0 0

Como resultado, obtenemos 100100 2 o 36 10 .

Usando el operador AND bit a bit, puede verificar si un número es par o impar. Para números enteros, si el bit menos significativo es 1, entonces el número es impar (basado en la conversión de binario a decimal). ¿Por qué es necesario esto cuando solo puede usar %2? En mi computadora, por ejemplo, &1 es 66% más rápido. Bastante buen aumento de rendimiento, te digo.

OR exclusivo (XOR)

La diferencia entre XOR y OR bit a bit es que para obtener un 1, solo un bit del par puede ser 1:

Por ejemplo, la expresión 138^43 sería...

A 1 0 0 0 1 0 1 0
B 0 0 1 0 1 0 1 1
A ^ B 1 0 1 0 0 0 0 1

… 10100001 2 , o 160 10

Con ^ puede cambiar los valores de dos variables (que tienen el mismo tipo de datos) sin usar una variable temporal.

También puede cifrar texto usando XOR. Para hacer esto, solo necesita iterar a través de todos los caracteres y ^ con el carácter clave. Para un cifrado más complejo, puede usar una cadena de caracteres:

String msg = "Este es un mensaje"; char mensaje = msg.toCharArray(); Clave de cadena = ".*)"; Cadena cadena encriptada = nueva cadena (); para(int i = 0; i< message.length; i++){ encryptedString += message[i]^key.toCharArray(); }

XOR no es lo más manera confiable cifrado, pero puede formar parte del algoritmo de cifrado.

Negación bit a bit (NOT)

La negación bit a bit invierte todos los bits del operando. Es decir, lo que era 1 se convertirá en 0 y viceversa.

Aquí, por ejemplo, la operación ~52:

A 0 0 1 1 0 1 0 0
~A 1 1 0 0 1 0 1 1

El resultado será 203 10

Cuando se usa la negación bit a bit, el signo del resultado siempre será opuesto al signo del número original (cuando se trabaja con números con signo). Por qué sucede esto, lo descubrirá ahora mismo.

código adicional

Aquí debo contarles un poco sobre la forma en que se representan los números enteros negativos en las computadoras, a saber, el complemento a dos. Sin entrar en detalles, es necesario para facilitar la aritmética de los números binarios.

Lo principal que debe saber sobre los números en complemento a dos es que el bit más significativo está firmado. Si es igual a 0, entonces el número es positivo y coincide con la representación de este número en el código directo, y si es 1, entonces es negativo. Es decir, 10111101 es negativo y 01000011 es positivo.

Para convertir un número negativo en complemento a dos, debe invertir todos los bits del número (es decir, usar la negación bit a bit) y agregar 1 al resultado.

Por ejemplo, si tenemos 109:

A 0 1 1 0 1 1 0 1
~A 1 0 0 1 0 0 1 0
~A+1 1 0 0 1 0 0 1 1

Con el método anterior, obtenemos -109 en complemento a dos.
Se acaba de presentar una explicación muy simplificada del código adicional y le recomiendo que estudie este tema con más detalle.

Desplazamiento de bit a la izquierda

Los cambios bit a bit son ligeramente diferentes de las operaciones bit a bit discutidas anteriormente. Un desplazamiento a la izquierda bit a bit desplaza los bits de su operando N bits a la izquierda, comenzando con el bit menos significativo. Los espacios vacíos después del turno se rellenan con ceros. Sucede así:

A 1 0 1 1 0 1 0 0
A<<2 1 1 0 1 0 0 0 0

Una característica interesante de desplazar N posiciones a la izquierda es que equivale a multiplicar un número por 2 N . entonces 43<<4 == 43*Math.pow(2,4) . Использование сдвига влево вместо Math.pow обеспечит неплохой прирост производительности.

Desplazamiento de bits a la derecha

Como habrás adivinado, >> desplaza los bits del operando un número específico de bits hacia la derecha.

Si el operando es positivo, los espacios vacíos se rellenan con ceros. Si inicialmente trabajamos con un número negativo, entonces todos los espacios vacíos a la izquierda se llenan con unos. Esto se hace para preservar el signo de acuerdo con el código adicional explicado anteriormente.

Dado que un desplazamiento a la derecha bit a bit es lo opuesto a un desplazamiento a la izquierda bit a bit, es fácil adivinar que desplazar un número a la derecha por N número de posiciones también divide ese número por 2 N . Nuevamente, esto es mucho más rápido que la división normal.

Conclusión

Entonces, ahora sabes más sobre las operaciones con bits y no les tengas miedo. Supongo que no usará >>1 cada vez que divida por 2. Sin embargo, es bueno tener operaciones bit a bit en su arsenal, y ahora puede usarlas si las necesita, o responder a una pregunta complicada de la entrevista.


Operador Sintaxis Descripción
Y A Y B Conjunción: Si A y B tienen verdadero valor, entonces - Cierto. De lo contrario - Falso
O A O B Disyunción: Si cualquiera de los operandos es Verdadero, entonces Verdadero. De lo contrario - Falso
NO NO UN Negación: Si A es Falso, entonces Verdadero. De lo contrario - Falso
XOR A X O B Excepción: Si A es Verdadero o B es Verdadero, entonces Verdadero. De lo contrario - Falso
EQV A EQV B Equivalencia: Si A tiene el mismo valor que B, entonces es Verdadero. De lo contrario - Falso
DIABLILLO A IMP B Implicación: Si A es Verdadero y B es Falso, entonces Falso. De lo contrario - Verdadero

Como operando de un operador lógico, puede utilizar cualquier expresión válida que tenga un resultado booleano, así como un número que se pueda convertir en un valor booleano.

El resultado de una operación lógica es un valor de tipo booleano (o nulo si al menos uno de los operandos es nulo).

Operador lógico Y

Sintaxis:
Operando_1 Y Operando_2


El operador AND realiza conjunción lógica.

El resultado de esta operación es True solo cuando ambos operandos son True, de lo contrario, False.


mesa de la verdad


El operador AND se puede utilizar en varios operandos:


(5 3) Y (5=6) el resultado es Falso


Independientemente del número de operandos, la operación AND lógica dará como resultado True solo si todos los operandos de la expresión se evalúan como True. En cualquier otro caso, el resultado será Falso. Tenga en cuenta que los operandos están entre paréntesis. VBA primero evalúa el valor de cada operando dentro de los corchetes y luego la expresión completa.

Operador lógico O

Sintaxis:
Operando_1 O Operando_2


El operador OR realiza disyunción lógica.

El resultado de esta operación es True si al menos uno de los operandos es True, de lo contrario, False.


mesa de la verdad


El operador OR se puede utilizar en varios operandos:


(5 3) O (5=6) el resultado es Verdadero


Independientemente del número de operandos, el resultado de la operación OR lógica siempre será Verdadero si al menos uno de los operandos de la expresión se evalúa como Verdadero. De lo contrario, el resultado será Falso.

Los operadores AND y OR se pueden combinar:


((5 3)) O (5=6) el resultado es Verdadero

Operador booleano NO

Sintaxis:
NO operando


El operador NOT hace negación lógica.

El operador NOT usa solo un operando.


mesa de la verdad


Los operadores AND OR NOT se pueden combinar:


((5 3)) O NO (5=6) el resultado es Verdadero

Operador lógico XOR

Sintaxis:
Operando_1 XOR Operando_2


El operador XOR realiza excepción lógica.

El resultado de esta operación es True si los operandos tienen valores diferentes, de lo contrario es False.


mesa de la verdad


((5 3)) O NO (5=6) XOR (5=5) el resultado es Falso

Operador lógico EQV

Sintaxis:
Operando_1 EQV Operando_2


El operador EQV es el operador equivalencia lógica.

El resultado de esta operación es True si los operandos tienen el mismo valor, de lo contrario es False.


mesa de la verdad


((5 3)) O NO (5=6) EQV (5=5) el resultado es Verdadero

Operador booleano IMP

Sintaxis:
Operando_1 IMP Operando_2


La instrucción IMP realiza una operación lógica. trascendencia.


mesa de la verdad


((5 3)) O NO (5=6) IMP (5=5) el resultado es Verdadero


El operador lógico IMP es el menos intuitivo de todos operadores logicos. Afortunadamente, la necesidad de su uso surge muy raramente.

Denotado por la figura retórica "ya sea ... o ..." La declaración compuesta "ya sea A o B" se considera verdadera cuando A o B son verdaderas, pero no ambas a la vez; de lo contrario, la declaración compuesta es falsa.

Aquellos. el resultado es verdadero (igual a 1), Si A no es igual a B (A≠B).

Esta operación a menudo se compara con la disyunción porque tienen propiedades muy similares y ambas son similares a la unión "o" en el habla cotidiana. Compare las reglas para estas operaciones:

1. cierto si es cierto o , o ambos a la vez.

2. cierto si es cierto o, Pero No ambos a la vez.

Operación excluye la última opción ("ambos a la vez") y por esta razón se llama "O" exclusivo. Ambigüedad El lenguaje natural es que la unión "o" puede usarse en ambos casos.

5. Implicación (consecuencia lógica) se forma combinando dos afirmaciones en una utilizando la figura retórica "si..., entonces...".

Entrada: A®B

Un enunciado compuesto formado por la operación de implicación es falso si y sólo si se sigue una conclusión falsa de una premisa verdadera (el primer enunciado) (el segundo enunciado).

Aquellos. si 1 implica 0, entonces el resultado es 0, de lo contrario es 1.

Por ejemplo, la afirmación "Si un número es divisible por 10, entonces es divisible por 5" es verdadera porque tanto la primera como la segunda afirmación son verdaderas.

La afirmación "Si un número es divisible por 10, entonces es divisible por 3" es falsa, porque se extrae una conclusión falsa de una premisa verdadera.

"Este cuadrilátero es un cuadrado" (A) Y "Un círculo se puede circunscribir alrededor de un cuadrilátero dado" (EN). Entonces el enunciado compuesto se lee como "Si el cuadrilátero dado es un cuadrado, entonces se puede circunscribir un círculo a su alrededor".

En el habla ordinaria, el enlace "si... entonces" describe una relación causal entre declaraciones. Pero en las operaciones lógicas, el significado de las declaraciones no se tiene en cuenta. Solo se considera su verdad o falsedad. Por lo tanto, uno no debe sentirse avergonzado por la "falta de sentido" de las implicaciones formadas por declaraciones que no tienen ninguna relación en contenido. Por ejemplo, así: "Si el presidente de los Estados Unidos es demócrata, entonces hay jirafas en África", "Si una sandía es una baya, entonces hay gasolina en la gasolinera".

6. La equivalencia (igualdad lógica, ~ º Û) se forma combinando dos declaraciones en una usando la figura retórica "...si y solo si..."

Un enunciado compuesto formado por la operación de equivalencia es verdadero si y solo si ambos enunciados son falsos o verdaderos al mismo tiempo.

Por ejemplo, las declaraciones "Una computadora puede realizar cálculos si y solo si está encendida" y "Una computadora no puede realizar cálculos si y solo si no está encendida" son verdaderas, ya que ambas declaraciones simples son simultáneamente verdaderas.


tablas de verdad

Para cada enunciado compuesto (función lógica) es posible construir una tabla de verdad que determina su verdad o falsedad para todas las combinaciones posibles de los valores iniciales de enunciados simples.

mesa de la verdad es una representación tabular de un circuito lógico (operación) que enumera todas las combinaciones posibles de valores de verdad señales de entrada(operandos) junto con el valor de verdad de la señal de salida (el resultado de la operación) para cada una de estas combinaciones.

Reflejamos las operaciones lógicas anteriores en la tabla de verdad:

En el álgebra de proposiciones, todas las funciones lógicas pueden reducirse mediante transformaciones lógicas a tres funciones básicas: suma lógica, multiplicación lógica y negación lógica.

Probemos que la operación implicación A®B es equivalente a la expresión lógica:

A menudo, para demostrar las capacidades limitadas de los perceptrones de una sola capa para resolver problemas, recurren a considerar el llamado problema XOR - OR exclusivo.

La esencia del problema es la siguiente. Se da la función lógica XOR - OR exclusivo. Esta es una función de dos argumentos, cada uno de los cuales puede ser cero o uno. Toma el valor cuando uno de los argumentos es igual a uno, pero no a ambos, en caso contrario. El problema se puede ilustrar con un sistema de una sola capa, una sola neurona y dos entradas que se muestra en la siguiente figura.

Denote una entrada por , y la otra por , entonces todas sus combinaciones posibles consistirán en cuatro puntos en el plano. La siguiente tabla muestra la relación requerida entre entradas y salidas, donde las combinaciones de entradas que deberían producir una salida cero están etiquetadas con y , una sola salida está etiquetada con y .

puntos Significado Significado Salida requerida
0 0 0
1 0 1
0 1 1
1 1 0

Una neurona con dos entradas puede formar una superficie de decisión en forma de una línea recta arbitraria. Para que la red implemente la función XOR proporcionada por la tabla anterior, debe colocar la línea de modo que los puntos estén en un lado de la línea y los puntos estén en el otro. Intentando dibujar una línea tan recta en la figura a continuación, estamos convencidos de que esto es imposible. Esto significa que no importa qué valores se asignen a los pesos y el umbral, una red neuronal de una sola capa no puede reproducir la relación de entrada-salida requerida para representar la función XOR.

Sin embargo, la función XOR se forma fácilmente mediante una red de dos capas y de muchas maneras. Consideremos una de estas formas. Modernicemos la red de la figura agregando otra capa oculta de neuronas:

Tenga en cuenta que esta red dado como es, es decir se puede suponer que ella ya está entrenada. Los números sobre las flechas muestran los valores de los pesos sinápticos. Como función de activación utilizamos la función de salto unitario con el umbral , que tiene el siguiente gráfico:

Entonces, el resultado de la operación de dicha red neuronal se puede representar como la siguiente tabla:

puntos Significado Significado Salida requerida
0 0 0 0 0 0
1 0 1 1 0 1
0 1 1 0 1 1
1 1 0 0 0 0

Cada una de las dos neuronas de la primera capa forma una superficie de decisión en forma de recta arbitraria (divide el plano en dos semiplanos), y la neurona de la capa de salida combina estas dos soluciones, formando una superficie de decisión en el forma de una tira formada por líneas rectas paralelas de neuronas de la primera capa:

La red neuronal utilizada en este artículo para resolver el problema XOR es primitiva y no utiliza todas las funciones de las redes multicapa. Obviamente, multicapa Redes neuronales tienen mayor poder de representación que los de una sola capa, sólo en el caso de la presencia de no linealidad. Y en esta red, se aplica una función de activación lineal de umbral. Una red de este tipo no se puede entrenar, por ejemplo, aplicando el algoritmo de retropropagación.

En la práctica, los elementos XOR de dos entradas son los más utilizados. En la fig. 1 muestra un condicional designación gráfica elemento sin inversión y su tabla de estado. En términos simples, la esencia de este elemento es la siguiente, la señal de salida aparece solo cuando los niveles lógicos en las entradas no son los mismos.

Esquema de selección del frente y corte del pulso.

En este circuito, se utilizan tres elementos XOR para retrasar los pulsos. DD1.4 - suma. Los pulsos de salida tienen flancos ascendentes y descendentes estables. La duración de cada pulso de salida es igual a tres veces el tiempo de retardo de conmutación de cada uno de los tres elementos. El intervalo de tiempo entre los frentes de los pulsos de salida es igual a la duración del pulso de entrada. Este dispositivo también duplica la frecuencia de la señal de entrada.

Hay otra propiedad interesante "XOR". Si se aplica una constante "0" a una de las entradas, entonces la señal en la salida del elemento repetirá la señal de entrada, y si la constante "0" se cambia a una constante "1", entonces la señal de salida ya sea la inversión de la entrada.

A veces se hace necesario obtener un elemento XOR a partir de elementos lógicos estándar separados. Un ejemplo es el circuito del elemento XOR implementado en cuatro elementos 2-Y-NOT. La Figura 3 muestra el circuito XOR en sus cuatro estados. Esto muestra todos los niveles lógicos posibles en cada una de las puertas 2-NAND utilizadas.

Dichos elementos están incluidos en el esquema. En este circuito, el elemento XOR está compuesto por cuatro elementos 2-Y-NO incluidos en una carcasa del microcircuito K561LA7.

Moldeador señal discreta con diferencia de frecuencia

El circuito moldeador se muestra en la Figura 4. Aquí, el elemento lógico XOR también se implementa en cuatro elementos 2-Y-NOT.

En las entradas 1 y 2 del modelador caen pulsos rectangulares (ver gráficos 1 y 2), que difieren en la tasa de repetición. El nodo sobre los elementos lógicos DD1.1-DDI.4 multiplica estas señales. La señal de pulso de salida (gráfico 3) del elemento DD1.4 se alimenta al circuito integrador R3, C1, que la convierte en una señal triangular (gráfico 4) con una frecuencia igual a la diferencia de frecuencia de las señales de entrada, y el El amplificador operacional DA1 convierte la señal recibida en un meandro (ver Fig. gráfico 5). La resistencia R1 regula la duración de las semiondas positivas y negativas de la señal de salida. Un esquema muy interesante. Diseñador de radio, hay algo en lo que pensar. Por ejemplo, la señal que se muestra en el tercer gráfico es una señal de onda sinusoidal PWM.
Por supuesto, el rango de uso de los elementos XOR es mucho más amplio. He traído aquí en mi opinión más interesante para los radioaficionados.

Si nota un error, seleccione un fragmento de texto y presione Ctrl + Enter
COMPARTIR: