Tipo de Dato Unsigned.

Iniciado por FKT, 4 Septiembre 2015, 11:40 AM

0 Miembros y 1 Visitante están viendo este tema.

FKT

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:
#include <stdio.h>
#include <stdlib.h>

int main(){

printf("Introduce dos enteros para hacer la suma:\n")
int a, b, suma;

printf("Introduce un numero para la suma:\n");
scanf("%i",&a);
printf("Introduce el segundo numero:\n");
scanf("%i",&b);

suma = a + b;

printf("La suma de los dos enteros es: %i ",suma);

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.
Solo hay 10 tipos de personas, las que saben binario y las que no.

ivancea96

Para unsigned puedes poner "%u" 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".

Bob1098

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.

ivancea96

Cita de: 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.

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:
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:
diferencia = max(nivel1,nivel2) - min(nivel1,nivel2);

Que ya es más rodeo.

FKT

Teneis razón el ejemplo que he puesto para unsigned era muy cutre...

Gracias por aclarar mis dudas  :)
Solo hay 10 tipos de personas, las que saben binario y las que no.

Bob1098

Cita de: ivancea96 en  4 Septiembre 2015, 17:42 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:
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:
diferencia = max(nivel1,nivel2) - min(nivel1,nivel2);

Que ya es más rodeo.

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