Diferencia entre revisiones de «bitshift left»
De ArduWiki
(→Comentarios) |
(→Vea también) |
||
(No se muestran 19 ediciones intermedias del mismo usuario) | |||
Línea 5: | Línea 5: | ||
<pre> | <pre> | ||
valor <nowiki><<</nowiki> posiciones; | valor <nowiki><<</nowiki> posiciones; | ||
− | + | variable = variable <nowiki><<</nowiki> posiciones; | |
+ | variable <nowiki><<=</nowiki> posiciones; | ||
</pre> | </pre> | ||
− | == | + | == Parámetros == |
− | ;valor: Variable | + | ;valor:Constante a trabajar. Tipo [[int]] o [[long]]. |
− | ;posiciones:Cantidad de posiciones a desplazar. Valores entre 1~32. Tipo [[int]] | + | ;variable:Variable a trabajar. Tipo [[int]] o [[long]]. |
− | + | ;posiciones:Cantidad de posiciones bit a desplazar. Valores entre 1~32. Tipo [[int]] | |
− | |||
− | |||
== Comentarios == | == Comentarios == | ||
{| class="wikitable col1cen col2cen" | {| class="wikitable col1cen col2cen" | ||
+ | |+Algunas operaciones basicas | ||
|- | |- | ||
! Operacion !! Resultado | ! Operacion !! Resultado | ||
Línea 34: | Línea 34: | ||
|1 <nowiki><<</nowiki> 10||1024 | |1 <nowiki><<</nowiki> 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 == | == Ejemplo 1 == | ||
Línea 46: | Línea 51: | ||
== Ejemplo 2 == | == 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. | Presenta manualmente un numero tipo [[int]] en binario. | ||
Línea 65: | Línea 86: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == Ejemplo | + | == Ejemplo 4 == |
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++"> | ||
Línea 85: | Línea 106: | ||
== Vea también == | == Vea también == | ||
− | + | <categorytree mode=all>Operador bit a bit</categorytree> | |
− | + | <categorytree mode=all>Funciones bit y byte</categorytree> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | == Referencias == | + | == Referencias externas == |
* [https://www.arduino.cc/reference/en/language/structure/bitwise-operators/bitshiftleft/ Artículo oficial de Arduino sobre el tema (en inglés)] | * [https://www.arduino.cc/reference/en/language/structure/bitwise-operators/bitshiftleft/ Artículo oficial de Arduino sobre el tema (en inglés)] | ||
− | [[Category: | + | [[Category:Operador bit a bit]] |
Revisión actual del 16:25 26 sep 2019
Contenido
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
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