Diferencia entre revisiones de «Operadores de manejo de bits»

(Página creada con '<div align="justify">{{Definición|Nombre=Operadores de manejo de bits|imagen= |concepto=Permiten actuar sobre los operandos para modificar un solo bit, se aplican a variables ...')
 
m (Texto reemplazado: «<div align="justify">» por «»)
 
(No se muestran 7 ediciones intermedias de otro usuario)
Línea 1: Línea 1:
<div align="justify">{{Definición|Nombre=Operadores de manejo de bits|imagen=  |concepto=Permiten actuar sobre los operandos para modificar un solo bit, se aplican a variables del tipo char, short, int y long}}
+
{{Definición|Nombre=Operadores de manejo de bits|imagen=  |concepto=Permiten actuar sobre los operandos para modificar un solo bit, se aplican a variables del tipo char, short, int y long}}
 
'''Operadores de manejo de bits'''. Estos [[operadores]] permiten actuar sobre los operandos para modificar un solo bit, se aplican a [[variables]] del tipo char , short , int y long y no pueden ser usados con float ó double, sólo se pueden aplicar a expresiones enteras.
 
'''Operadores de manejo de bits'''. Estos [[operadores]] permiten actuar sobre los operandos para modificar un solo bit, se aplican a [[variables]] del tipo char , short , int y long y no pueden ser usados con float ó double, sólo se pueden aplicar a expresiones enteras.
 
En ocasiones los operadores de bits se utilizan para compactar la información, logrando que un tipo básico (por ejemplo un long) almacene magnitudes más pequeñas mediante aprovechamientos parciales de los bits disponibles
 
En ocasiones los operadores de bits se utilizan para compactar la información, logrando que un tipo básico (por ejemplo un long) almacene magnitudes más pequeñas mediante aprovechamientos parciales de los bits disponibles
 
== Operadores para manejo de bits ==
 
== Operadores para manejo de bits ==
  ~     Complemento a uno  
+
  ~ Complemento a uno  
  <<   Desplazamiento a izquierda  
+
  << Desplazamiento a izquierda  
  >>   Desplazamiento a derecha   
+
  >> Desplazamiento a derecha   
  &     AND; compara dos bits   
+
  & AND; compara dos bits   
  ^       XOR (OR exclusivo);  compara dos bits  
+
  ^ XOR (OR exclusivo);  compara dos bits  
  |       OR inclusivo;  compara dos bits
+
  | OR inclusivo;  compara dos bits
El primero es un operador unario, los restantes son binarios. Los tres primeros realizan manipulaciones en los bits del operando. Los restantes realizan comparaciones lógicas entre los bits de ambos operandos, similares a las que realizan los operadores lógicos entre objetos booleanos  
+
El primero es un operador unario, los restantes son binarios. Los tres primeros realizan manipulaciones en los bits del operando. Los restantes realizan comparaciones lógicas entre los bits de ambos operandos, similares a las que realizan los [[operadores lógicos]] entre objetos booleanos.
 
== Complemento a uno ~ (palabra clave compl) ==
 
== Complemento a uno ~ (palabra clave compl) ==
 
Este operador unitario invierte cada bit del operando;  0 es convertido en 1 y viceversa.
 
Este operador unitario invierte cada bit del operando;  0 es convertido en 1 y viceversa.
Línea 18: Línea 18:
 
  signed int s1 = compl 2;
 
  signed int s1 = compl 2;
 
  signed int s2 = ~s1 + 2;
 
  signed int s2 = ~s1 + 2;
== Desplazamiento a izquierda<< ==
+
== Desplazamiento a izquierda << ==
 
Este operador binario realiza un desplazamiento de bits a la izquierda. El bit más significativo (más a la izquierda) se pierde, y se le asigna un 0 al menos significativo (el de la derecha). El operando derecho indica el número de desplazamientos que se realizarán.
 
Este operador binario realiza un desplazamiento de bits a la izquierda. El bit más significativo (más a la izquierda) se pierde, y se le asigna un 0 al menos significativo (el de la derecha). El operando derecho indica el número de desplazamientos que se realizarán.
 
Los desplazamientos no son rotaciones; los bits que salen por la izquierda se pierden, los que entran por la derecha se rellenan con ceros. Este tipo de desplazamientos se denominan lógicos en contraposición a los cíclicos o rotacionales.
 
Los desplazamientos no son rotaciones; los bits que salen por la izquierda se pierden, los que entran por la derecha se rellenan con ceros. Este tipo de desplazamientos se denominan lógicos en contraposición a los cíclicos o rotacionales.
Línea 67: Línea 67:
 
  |=    or_eq
 
  |=    or_eq
 
  ^=  xor_eq
 
  ^=  xor_eq
 
 
 
</div>  
 
</div>  
 
== Véase también  ==
 
== Véase también  ==
 
*[[Operadores|Operadores]]  
 
*[[Operadores|Operadores]]  
 
*[[Operadores aritméticos|Operadores aritméticos]]
 
*[[Operadores aritméticos|Operadores aritméticos]]
*[[Operadores lógicos|Operadores lógicos]]  
+
*[[Operadores lógicos|Operadores lógicos]]
 +
*[[Operador condicional|Operador condicional]]
 +
*[[Operador coma|Operador coma]]
 +
*[[Operadores relacionales|Operadores relacionales]]
 +
*[[Operadores de asignación|Operadores de asignación]]
 +
*[[Operadores de modelado de tipos|Operadores de modelado de tipos]]
 +
*[[Operadores añadidos a expresión|Operadores añadidos a expresión]]
 +
*[[Operador de acceso a ámbito|Operador de acceso a ámbito]]
 +
*[[Operadores de puntero|Operadores de puntero]]
 +
*[[Operador new|Operador new]]
 +
*[[Operador delete|Operador delete]]
 +
*[[Operador sizeof|Operador sizeof]]
 +
*[[Operador typeid|Operador typeid]]
 +
*[[Operador de preproceso|Operador de preproceso]]
 
== Fuente  ==
 
== Fuente  ==
 +
* [http://www.zator.com/Cpp/E4_9_3.htm Operadores de manejo de Bits]
 
* [http://www.mitecnologico.com/Main/ManejoDeBits Manejo De Bits]
 
* [http://www.mitecnologico.com/Main/ManejoDeBits Manejo De Bits]
 
* [http://www.pablin.com.ar/computer/cursos/c2/manc3.htm Operadores]
 
* [http://www.pablin.com.ar/computer/cursos/c2/manc3.htm Operadores]
Línea 80: Línea 92:
 
*[http://c.conclase.net/curso/?cap=018 Operadores IV: Más operadores]
 
*[http://c.conclase.net/curso/?cap=018 Operadores IV: Más operadores]
 
   
 
   
 
 
[[Category:Informática]] [[Category:Lenguajes_de_programación]] [[Category:Programación]]
 
[[Category:Informática]] [[Category:Lenguajes_de_programación]] [[Category:Programación]]

última versión al 15:01 6 jul 2019

Operadores de manejo de bits
Información sobre la plantilla
Concepto:Permiten actuar sobre los operandos para modificar un solo bit, se aplican a variables del tipo char, short, int y long

Operadores de manejo de bits. Estos operadores permiten actuar sobre los operandos para modificar un solo bit, se aplican a variables del tipo char , short , int y long y no pueden ser usados con float ó double, sólo se pueden aplicar a expresiones enteras. En ocasiones los operadores de bits se utilizan para compactar la información, logrando que un tipo básico (por ejemplo un long) almacene magnitudes más pequeñas mediante aprovechamientos parciales de los bits disponibles

Operadores para manejo de bits

~  Complemento a uno 
<< Desplazamiento a izquierda 
>> Desplazamiento a derecha  
&  AND; compara dos bits  
^  XOR (OR exclusivo);  compara dos bits 
|  OR inclusivo;  compara dos bits

El primero es un operador unario, los restantes son binarios. Los tres primeros realizan manipulaciones en los bits del operando. Los restantes realizan comparaciones lógicas entre los bits de ambos operandos, similares a las que realizan los operadores lógicos entre objetos booleanos.

Complemento a uno ~ (palabra clave compl)

Este operador unitario invierte cada bit del operando; 0 es convertido en 1 y viceversa.

Sintaxis

~cast-expresion

Ejemplo

signed int s1 = ~2;        // equivale a:
signed int s1 = compl 2;
signed int s2 = ~s1 + 2;

Desplazamiento a izquierda <<

Este operador binario realiza un desplazamiento de bits a la izquierda. El bit más significativo (más a la izquierda) se pierde, y se le asigna un 0 al menos significativo (el de la derecha). El operando derecho indica el número de desplazamientos que se realizarán. Los desplazamientos no son rotaciones; los bits que salen por la izquierda se pierden, los que entran por la derecha se rellenan con ceros. Este tipo de desplazamientos se denominan lógicos en contraposición a los cíclicos o rotacionales.

Sintaxis

expr-desplazada << expr-desplazamiento

Comentario

El patrón de bits de expr-desplazada sufre un desplazamiento izquierda del valor indicado por la expr-desplazamiento. Ambos operandos deben ser números enteros o enumeraciones. En caso contrario, el compilador realiza una conversión automática de tipo. El resultado es del tipo del primer operando. expr-desplazamiento, una vez promovido a entero, debe ser un entero positivo y menor que la longitud del primer operando. En caso contrario el resultado es indefinido (depende de la implementación).

Ejemplo

unsigned long x = 10;
int y = 2;
unsigned long z = x << y;

Desplazamiento a derecha >>

Sintaxis

expr-desplazada >> expr-desplazamiento

Ejemplo:

unsigned long x = 10;
unsigned long z = x >> 2;

Comentario:

El patrón de bits de expr-desplazada sufre un desplazamiento derecho del valor indicado por la expr-desplazamiento. Como en el caso anterior, ambos operandos deben ser números enteros o enumeraciones. En caso contrario, el compilador realiza una conversión automática de tipo. El resultado es del tipo del primer operando. Una vez promovida a entero, expr-desplazamiento debe ser un entero positivo y menor que la longitud del primer operando. En caso contrario, el resultado es indefinido (depende de la implementación). El bit menos significativo (a la derecha) se pierde, pero hay que advertir que si expr-desplazada es un entero con signo y es negativo, el resultado depende de la implementación.

AND lógico & (palabra clave bitand)

Este operador binario compara ambos operandos bit a bit, y como resultado devuelve un valor construido de tal forma, que cada bits es 1 si los bits correspondientes de los operandos están a 1. En caso contrario, el bit es 0.

Sintaxis

AND-expresion & equality-expresion

Ejemplo:

int x = 10, y = 20;
int z = x & y;          // equivale a: int z = x bitand y;

XOR OR exclusivo ^ (palabra clave xor)

El funcionamiento de este operador binario es parecido al AND lógico, salvo que en este caso el resultado es 1 si ambos bits son complementarios (uno es 0 y el otro 1). En caso contrario devuelve 0.

Sintaxis

expr-OR-exclusiva ^ AND-expresion

Ejemplo

int x = 10, y = 20;
int z = x ^ y;        // equivale a: int z = x xor y;

OR inclusivo | (palabra clave bitor)

Este operador binario tiene un funcionamiento parecido a los anteriores (AND y XOR), salvo que en este caso el resultado es 1 si alguno de ellos está a 1. En caso contrario devuelve 0.

Sintaxis

expr-OR-inclusiva | expr-OR-exclusiva

Ejemplo

int x = 10, y = 20;
int z = x | y;        // equivale a:

Asignaciones compuestas con operadores de bits

Salvo el complemento a uno (~) que es unitario, los demás operadores de menejo de bits pueden combinarse con la asignación simple (=) para dar lugar a una asignación compuesta. El estándar C++ permite una representación explícita (mediante palabra clave) para alguna de estas asignaciones compuesta:

&=  and_eq
|=    or_eq
^=   xor_eq

Véase también

Fuente