Diferencia entre revisiones de «bitshift left»

De ArduWiki
Saltar a: navegación, buscar
(Parametros)
(Ejemplo)
Línea 35: Línea 35:
 
|}
 
|}
  
== Ejemplo ==
+
== Ejemplo 1 ==
 +
<syntaxhighlight lang="c++">
 +
int a = B0000000000000101;  //5
 +
int b = a << 3  //B0000000000101000 osea 40
 +
 
 +
int x = B0000000000000101;  //5
 +
int y = B0000000000001110;  //14
 +
int result = x << y;  //B0100000000000000 - el primer bit fue descartado
 +
</syntaxhighlight>
 +
 
 +
== Ejemplo 2 ==
 +
Presenta manualmente un numero tipo [[int]] en binario.
 +
 
 +
<syntaxhighlight lang="c++">
 +
void setup(){
 +
  Serial.begin(9600);
 +
  int c = 12345;
 +
  for (byte bits=7; bits>-1; bits--) {
 +
      if (c & (1 << bits)) {
 +
        Serial.print("1");
 +
      }else {
 +
        Serial.print("0");
 +
      }
 +
  }
 +
}
 +
void loop(){
 +
  //Nada
 +
}
 +
</syntaxhighlight>
 +
 
 +
== Ejemplo 3 ==
 
Partiendo del valor 1, se puede obtener el resultado de una potencia con base 2.
 
Partiendo del valor 1, se puede obtener el resultado de una potencia con base 2.
 
<syntaxhighlight lang="c++">
 
<syntaxhighlight lang="c++">
 
unsigned long resultado = 1;
 
unsigned long resultado = 1;
 
+
void setup(){
for (byte potencia = 0; potencia < sizeof(unsigned long) * 8; potencia++) {
+
  for (byte pot=0; pot<sizeof(unsigned long) * 8; pot++) {
  Serial.print("2^");
+
      Serial.print("2^");
  Serial.print(potencia);
+
      Serial.print(pot);
  Serial.print(" = ");
+
      Serial.print(" = ");
  resultado <<= 1; // Se desplaza una vez cada iteración de este ciclo.
+
      resultado <<= 1;           // Se desplaza una vez cada iteración de este ciclo.
  Serial.println(resultado);
+
      Serial.println(resultado);
 +
  }
 +
}
 +
void loop(){
 +
  //Nada
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>

Revisión del 23:38 25 abr 2019

Descripción

Desplaza hacia la izquierda (hacia el bit más significativo) una cantidad determinada de bits de una variable o constante; rellenando con ceros.

Sintaxis

valor << posiciones;
valor <<= posiciones;

Parametros

valor
Variable o constante a trabajar. Tipo int o long.
posiciones
Cantidad de posiciones a desplazar. Valores entre 1~32. Tipo int

Advertencias

  • Esta operación desplaza bits descartando los que hayan quedado fuera, no los rota de posición. Por lo tanto, desplazar la cantidad suficiente de bits puede resultar en un valor cero.

Comentarios

Operacion Resultado
1 << 0 1
1 << 1 2
1 << 2 4
1 << 8 8
1 << 8 256
1 << 9 512
1 << 10 1024

Ejemplo 1

int a = B0000000000000101;  //5
int b = a << 3  //B0000000000101000 osea 40

int x = B0000000000000101;  //5
int y = B0000000000001110;  //14
int result = x << y;  //B0100000000000000 - el primer bit fue descartado

Ejemplo 2

Presenta manualmente un numero tipo int en binario.

void setup(){
   Serial.begin(9600);
   int c = 12345;
   for (byte bits=7; bits>-1; bits--) {
      if (c & (1 << bits)) {
         Serial.print("1");
      }else {
         Serial.print("0");
      }
   }
}
void loop(){
   //Nada
}

Ejemplo 3

Partiendo del valor 1, se puede obtener el resultado de una potencia con base 2.

unsigned long resultado = 1;
void setup(){
   for (byte pot=0; pot<sizeof(unsigned long) * 8; pot++) {
      Serial.print("2^");
      Serial.print(pot);
      Serial.print(" = ");
      resultado <<= 1;           // Se desplaza una vez cada iteración de este ciclo.
      Serial.println(resultado);
   }
}
void loop(){
   //Nada
}

Imprime los resultados desde 2 a la 0 hasta 2 a la 31.

Vea también

Referencias