Cuando utilizar signed y cuando unsigned (lenguaje C)

Iniciado por NOB2014, 17 Agosto 2014, 15:58 PM

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

NOB2014

Hola a todos.-

Bueno simplemente eso, no me queda muy claro si es simplemente para obtener un número mayor o tiene otro significado, recuerdo que en una oportunidad(en este foro) me daba un error por declarar una variable como unsigned, no puedo encontrar el post, por lo tanto hago esta consulta a Uds. que seguramente con tanta práctica y sapiencia me lo podrán aclarar.-

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

ivancea96

#1
Si va a tomar números negativos, signed. Sino, unsigned.

##Editado##

Eternal Idol

Lo contrario, signed cuando se trabaja con numeros negativos.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

ivancea96


JorgeEMX

También depende, como dices, del número de rango de números positivos que vayas a necesitar. Tampoco es muy necesario usar unsigned, aunque no vayas a ocupar números negativos, si el rango de números enteros con signo te basta.

NOB2014

Hola.
Muchas gracias a los tres por responder, me parecía que el tema daba para un análisis más profundo, evidentemente me equivoque.-
Lo voy a utilizar como Uds. dicen,  si hay certeza o posibilidades de que la variable tenga que alojar valores negativo, utilizar signed, si estoy seguro de que la variable siempre alojara valores positivos, utilizar unsigned.-
No obstante haciendo estas prácticas me encuentro con cosas que parecen incoherente pero ocurren, ¿alguien me las puede explicar.?

#include<stdio.h>

int main(void){
unsigned int a = -1;
signed int b = -1;

printf("\n valor de a = %d\n", a);

if (a < 0){
printf("\n Sin signo < 0\n");
}

if (b < 0){
printf("\n Con signo < 0\n");
}

if (a == b){
printf("\n %d == %d\n", a, b);
printf("\n %ud == %ud\n\n", a, b);
}

return 0;
}


Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Blaster

#6
Cita de: NOB2014 en 17 Agosto 2014, 19:49 PM
No obstante haciendo estas prácticas me encuentro con cosas que parecen incoherente pero ocurren, ¿alguien me las puede explicar.?

Utilizas el especificador de formato %d esto obliga a la función printf a interpretar el numero como un entero con signo el especificador apropiado para tal caso es %u, al usar este imprimirás el mayor número que se puede representar en un unsigned int menos 1 debido al desbordamiento.    

Saludos

NOB2014

Hola Blaster.
No logro entender del todo lo que me propones porque yo huso %u con printf, pero no importa por el momento me quedo con la teoría expuesta en el post (mío) anterior, creo que es suficiente.-

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

ivancea96

Printf interpreta las variables que le pasas según el % que le coloques.
Si pones un unsigned int a -1, se convertirá en 0xFFFFFFFF. Y así es como lo va a interpretar printf.

NOB2014

Hola Ivancea96.
Bueno al fin me queda del todo claro, no es porque Blaster lo hayas explicado mal, sino es porque de esta manera me cayó la ficha.- 

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-