[C con Clase] duda simple

Steven Davidson srd4121 en njit.edu
Sab Sep 4 01:52:57 CEST 2010


Hola Mai,

On 9/3/2010 5:14 AM, maite mai wrote:
> hola,
>
> estoy leyendo los operadores de asignación
>
> ¿exáctamente qué hace <<=?  a = a << b; no me queda claro qué hace
> esta asignación. Gracias.
>

Esto es correcto. El comportamiento de <<= es la operación << y luego 
una asignación.

> Podrías decirme también ^=
>

Supongo que estás en el capítulo 4 de nuestro curso de C++. Por ahora, 
no hemos visto estos operadores << y ^ porque son algo avanzados y no 
los necesitamos por el momento. Veremos éstos y otros operadores a nivel 
de bits en el capítulo 18 ( 
http://c.conclase.net/curso/index.php?cap=018#inicio ).

El operador << (desplazamineto a la izquierda) sirve para mudar una 
secuencia de bits a la izquierda una cantidad de lugares. Por ejemplo,

unsigned short int num = 14;

num <<= 3;

Esta operación implica el siguiente comportamiento:

num = num << 3;

La operación del desplazamiento a la izquierda supone la siguiente 
operación donde 14 en binario es 0000000000001110:

0000000000001110 << 3

Movemos toda la secuencia 3 lugares a la izquierda. Ahora obtenemos esto:

0000000001110000

que en decimal es 112. Por lo tanto, asignamos este valor a 'num'.

num <<= 3;

cout << num;

Aparecerá en pantalla:

112

Esto equivale a multiplicar 14 * 2^3 = 14 * 8 = 112. Típicamente, usamos 
<< para multiplicar un entero no negativo por potencias de 2 y >> para 
dividirlo por potencias de 2.

El operador ^ sirve para la operación XOR (OR exclusivo) a nivel de 
bits. Es sencillo de operar viendo la tabla:

  A | B | A ^ B
---+---+-------
  0 | 0 |   0
  0 | 1 |   1
  1 | 0 |   1
  1 | 1 |   0

Si ambos operandos son iguales, entonces el resultado es 0; si son 
distintos, entonces el resultado es 1. Esta operación se aplica a cada 
pareja de bits en una secuencia. Por ejemplo,

unsigned short int num1 = 14, num2 = 18;

num1 ^= num2;

Esto equivale a la siguiente operación:

     0000000000001110
XOR 0000000000010010
--------------------
     0000000000011100

El resultado, en decimal, es 28, por lo que 'num1' contiene el número 28.


Espero haber aclarado la duda.

Steven





Más información sobre la lista de distribución Cconclase