Linux/Unix Shell Scripting - division que siempre se divida por 2 y el resto lo vuelva a dividir por 2 hasta dejarlo a 0

 
Vista:
Imágen de perfil de david

division que siempre se divida por 2 y el resto lo vuelva a dividir por 2 hasta dejarlo a 0

Publicado por david (2 intervenciones) el 21/06/2016 20:21:52
necesito hacer un script en debian de una division que siempre se divida por 2 y el resto lo vuelva a dividir por 2 hasta dejarlo a 0 y no se como hacerla, cualquier ayuda se agradece. un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 104
Oro
Ha mantenido su posición en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

division que siempre se divida por 2 y el resto lo vuelva a dividir por 2 hasta dejarlo a 0

Publicado por xve (309 intervenciones) el 22/06/2016 07:49:25
Hola David, haber si te sirve este código...

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
 
echo "Introduce un numero:"
read numero
 
while [ $numero -ne 0 ]
do
	numero=`expr $numero % 2`
	echo $numero
	if [ $numero -eq 1 ];then
		break;
	fi
done

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Aarón Martín
Val: 18
Ha disminuido su posición en 5 puestos en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

division que siempre se divida por 2 y el resto lo vuelva a dividir por 2 hasta dejarlo a 0

Publicado por Aarón Martín (2 intervenciones) el 22/06/2016 23:59:47
Hola David,

Dado que no mencionas si la división debe ser entera o no, hay una forma muy rápida de hacer división entera, es una operación bit a bit que se llama corrimiento (shift) a la derecha, el número lo conviertes a binario y vas recorriendo los bits a la derecha de tal manera que van quedando 0's del lado izquierdo, dado que el número está en binario esto significa que estás haciendo una división entre 2.

Para mayor información revisa la operación shift (>>). Casi todos los lenguajes la tienen.

Saludos.

1
2
3
4
5
6
7
8
9
echo "Dame el numero:"
read numero
 
while [ $numero -ne 0 ]
do
  numero=$(($numero >> 1))
  echo $numero
 
done
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar