elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cuando utilizar signed y cuando unsigned (lenguaje C)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Cuando utilizar signed y cuando unsigned (lenguaje C)  (Leído 13,349 veces)
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Cuando utilizar signed y cuando unsigned (lenguaje C)
« Respuesta #10 en: 20 Agosto 2014, 05:30 am »

Solo para redondear el tema.

Convertir el valor -1 a un tipo entero sin signo es la forma usual de obtener el valor máximo del tipo en cuestión sin tener que recurrir al encabezado <limits.h>. Esto porque cuando un valor con signo se convierte a uno sin signo y el valor esta fuera del rango valido (-1 lo esta) se le suma o resta (dependiendo del caso) MAX + 1 hasta obtener uno valido (-1 + MAX + 1 == MAX).

Otro caso problemático son las conversiones aritméticas (para mas información buscar el tema "Usual arithmetic conversions"), estas definen como debe obtenerse el tipo común en el cual se realizara la operación. Por ejemplo si los operandos de un operador relacional son de tipo signed int y unsigned int entonces el primero se convierte al segundo:
Código
  1. int a;
  2. unsigned b;
  3.  
  4. a = -1;
  5. b =  0;
  6. printf("%d < %u ? %s\n", a, b, a < b ? "Si" : "No"); /* -1 < 0 ? No */

Lo bueno es que la mayoría de los compiladores, al utilizarlos en su modo estricto, advierten sobre ese tipo de operaciones.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Cuando utilizar signed y cuando unsigned (lenguaje C)
« Respuesta #11 en: 20 Agosto 2014, 19:08 pm »

Hola rir.
Gracias por el aporte, hay cosas que o no están en todos los manuales o uno las pasa por alto, gracias que están Uds.

Convertir el valor -1 a un tipo entero sin signo es la forma usual de obtener el valor máximo del tipo en cuestión sin tener que recurrir al encabezado <limits.h>. Esto porque cuando un valor con signo se convierte a uno sin signo y el valor esta fuera del rango valido (-1 lo esta) se le suma o resta (dependiendo del caso) MAX + 1 hasta obtener uno valido (-1 + MAX + 1 == MAX).

Código
  1. #include<stdio.h>
  2.  
  3. int main(void){
  4.     unsigned int a = -1;
  5.  
  6.     printf("\n\n El m%cximo valor soportado por un entero sin signo es...: %u\n\n", 160, a);
  7.  
  8.     return 0;
  9. }

          Saludos.
          Daniel


En línea

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.-
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Cuando utilizar signed y cuando unsigned (lenguaje C)
« Respuesta #12 en: 21 Agosto 2014, 01:42 am »

Hola rir.
Gracias por el aporte, hay cosas que o no están en todos los manuales o uno las pasa por alto, gracias que están Uds.


No solamente puedes imprimir los valores límites sino que puedes guardarlos en una variable para su uso posterior. Como ejemplo:

Código
  1. ------------------------------------------------------------
  2.  unsigned long long  int a = -1;
  3.  unsigned long long b = a ;
  4. ------------------------------------------------------------

¡¡¡¡ Saluditos! ..... !!!!


« Última modificación: 21 Agosto 2014, 01:44 am por leosansan » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Cuando utilizar signed y cuando unsigned (lenguaje C)
« Respuesta #13 en: 21 Agosto 2014, 07:59 am »

No solamente puedes imprimir los valores límites sino que puedes guardarlos en una variable para su uso posterior.

En los dos mensajes anteriores al tuyo se hace eso, trata de no romper las reglas todo el tiempo, si se te borra un mensaje es por algo, volver a publicarlo no es una buena idea.

Reglas del subforo:
Si van a responder a un hilo por favor lean atentamente su contenido y comprueben que su aporte no haya sido hecho con anterioridad por otro usuario.
En línea

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
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Cuando utilizar signed y cuando unsigned (lenguaje C)
« Respuesta #14 en: 21 Agosto 2014, 14:03 pm »

En los dos mensajes anteriores al tuyo se hace eso, trata de no romper las reglas todo el tiempo, si se te borra un mensaje es por algo, volver a publicarlo no es una buena idea.
............................................................

Me pareció que se hacia hincapié en la impresión en lugar de la asignación.

De todas formas si he molestado por reiterativo es que no supe interpretar los dos mensajes anteriores, que para mí iban en el sentido, reitero, de la impresión. Tal vez el de rir3760 sí hacía referencia a la asignación pero tan sólo quise ser más explícito.

Siento las molestias y estaré más al loro.

Un fuerte saludo de León.

« Última modificación: 21 Agosto 2014, 18:21 pm por leosansan » En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines