Diferencia entre revisiones de «bitshift left»

De ArduWiki
Saltar a: navegación, buscar
m (Kike GL trasladó la página bitshift izquierda a bitshift left sin dejar una redirección)
(Vea también)
 
(No se muestran 28 ediciones intermedias de 2 usuarios)
Línea 1: Línea 1:
 
== Descripción ==
 
== 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 ==
 
== Sintaxis ==
 
<pre>
 
<pre>
 +
valor <nowiki><<</nowiki> posiciones;
 +
variable = variable <nowiki><<</nowiki> posiciones;
 +
variable <nowiki><<=</nowiki> posiciones;
 
</pre>
 
</pre>
 +
 +
== Parámetros ==
 +
;valor:Constante a trabajar. Tipo [[int]] o [[long]].
 +
;variable:Variable a trabajar. Tipo [[int]] o [[long]].
 +
;posiciones:Cantidad de posiciones bit a desplazar. Valores entre 1~32. Tipo [[int]]
 +
 +
== Comentarios ==
 +
{| class="wikitable col1cen col2cen"
 +
|+Algunas operaciones basicas
 +
|-
 +
! Operacion !! Resultado
 +
|-
 +
|1 <nowiki><<</nowiki> 0||1
 +
|-
 +
|1 <nowiki><<</nowiki> 1||2
 +
|-
 +
|1 <nowiki><<</nowiki> 2||4
 +
|-
 +
|1 <nowiki><<</nowiki> 8||8
 +
|-
 +
|1 <nowiki><<</nowiki> 8||256
 +
|-
 +
|1 <nowiki><<</nowiki> 9||512
 +
|-
 +
|1 <nowiki><<</nowiki> 10||1024
 +
|}
 +
 +
{{Nota|Ver ejemplo 2.}}
  
 
== Advertencias ==
 
== 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.
 +
 +
== 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 ==
 +
Demuestra el comentario.
 +
 +
<syntaxhighlight lang="c++">
 +
void setup(){
 +
  Serial.begin(9600);
 +
  for (byte i=0; i<=10; i++) {
 +
      Serial.println(1 << i);
 +
  }
 +
}
 +
 +
void loop(){
 +
  //Nada
 +
}
 +
</syntaxhighlight>
 +
 +
== Ejemplo 3 ==
 +
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 ==
+
== Ejemplo 4 ==
<pre>
+
Partiendo del valor 1, se puede obtener el resultado de una potencia con base 2.
</pre>
+
<syntaxhighlight lang="c++">
 +
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
 +
}
 +
</syntaxhighlight>
 +
Imprime los resultados desde 2 a la 0 hasta 2 a la 31.
  
 
== Vea también ==
 
== Vea también ==
* [[not]]
+
<categorytree mode=all>Operador bit a bit</categorytree>
* [[and]]
+
<categorytree mode=all>Funciones bit y byte</categorytree>
* [[or]]
 
* [[bitshift derecha]]
 
  
== Referencias ==
+
== Referencias externas ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
+
* [https://www.arduino.cc/reference/en/language/structure/bitwise-operators/bitshiftleft/ Artículo oficial de Arduino sobre el tema (en inglés)]
  
[[Category:Estructura]]
+
[[Category:Operador bit a bit]]

Revisión actual del 16:25 26 sep 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;
variable = variable << posiciones;
variable <<= posiciones;

Parámetros

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

Comentarios

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

Nota: Ver ejemplo 2.


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.

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

Demuestra el comentario.

void setup(){
   Serial.begin(9600);
   for (byte i=0; i<=10; i++) {
      Serial.println(1 << i);
   }
}

void loop(){
   //Nada
}

Ejemplo 3

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 4

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 externas