Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: FKT en 4 Septiembre 2015, 11:40 am



Título: Tipo de Dato Unsigned.
Publicado por: FKT en 4 Septiembre 2015, 11:40 am
Buenas  :).

Por lo que tengo entendido las variables unsigned (sin signo) que se refieren a los números enteros positivos ya que se sobreentiende que si no ponemos signo es positivo, porque en programas del tipo:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(){
  5.  
  6. printf("Introduce dos enteros para hacer la suma:\n")
  7. int a, b, suma;
  8.  
  9. printf("Introduce un numero para la suma:\n");
  10. scanf("%i",&a);
  11. printf("Introduce el segundo numero:\n");
  12. scanf("%i",&b);
  13.  
  14. suma = a + b;
  15.  
  16. printf("La suma de los dos enteros es: %i ",suma);
  17.  
  18. return 0;

Porque si sabes que en un programa los valores que van a usarse serán positivos en en todo momento no se pueden sustituir los tipos de datos "int" por "unsigned"? Si es así como se representa con el (%"Aquí")  en int ("%i") lo que no se es en unsigned.

Gracias.


Título: Re: Tipo de Dato Unsigned.
Publicado por: ivancea96 en 4 Septiembre 2015, 14:06 pm
Para unsigned puedes poner "%u" http://www.cplusplus.com/reference/cstdio/scanf/ (http://www.cplusplus.com/reference/cstdio/scanf/)

"int" es más cómodo que "unsigned". Además, no utilices unsigned en el caso de que se puedan poner valores negativos.

En ese ejemplo, se pueden poner números negativos perfectamente.
Sin ir más lejos, mira qué ocurre al asignar un número negativo (Ej. -1) a una variable "unsigned int".


Título: Re: Tipo de Dato Unsigned.
Publicado por: Bob1098 en 4 Septiembre 2015, 15:10 pm
Claro, como bien dice ivancea solo debes utilizar unsigned en el caso de que utilices números enteros que solo puedan ser positivos (números naturales). Un ejemplo podría ser los niveles de un personaje de videojuegos, pueden ir del 1 al 100 pero no puedes ser nivel -1, por ejemplo.


Título: Re: Tipo de Dato Unsigned.
Publicado por: ivancea96 en 4 Septiembre 2015, 17:42 pm
Claro, como bien dice ivancea solo debes utilizar unsigned en el caso de que utilices números enteros que solo puedan ser positivos (números naturales). Un ejemplo podría ser los niveles de un personaje de videojuegos, pueden ir del 1 al 100 pero no puedes ser nivel -1, por ejemplo.

Incluso en ese ejemplo, que sea unsigned te quita muchas posibilidades. Por ejemplo, si quieres saber la diferencia de niveles entre dos personajes, harías:
Código
  1. diferencia = abs(nivel1 - nivel2);
Claro que si haces eso con unsigned, te puede dar valores erroneos si nivel2>nivel1.

Habría que buscar otro modo, como:
Código
  1. diferencia = max(nivel1,nivel2) - min(nivel1,nivel2);

Que ya es más rodeo.


Título: Re: Tipo de Dato Unsigned.
Publicado por: FKT en 4 Septiembre 2015, 19:27 pm
Teneis razón el ejemplo que he puesto para unsigned era muy cutre...

Gracias por aclarar mis dudas  :)


Título: Re: Tipo de Dato Unsigned.
Publicado por: Bob1098 en 4 Septiembre 2015, 22:36 pm
Incluso en ese ejemplo, que sea unsigned te quita muchas posibilidades. Por ejemplo, si quieres saber la diferencia de niveles entre dos personajes, harías:
Código
  1. diferencia = abs(nivel1 - nivel2);
Claro que si haces eso con unsigned, te puede dar valores erroneos si nivel2>nivel1.

Habría que buscar otro modo, como:
Código
  1. diferencia = max(nivel1,nivel2) - min(nivel1,nivel2);

Que ya es más rodeo.

Muy cierto, no me lo había planteado de esa manera...