C/Visual C - Sufijos en las constantes de C

 
Vista:
Imágen de perfil de William Atef
Val: 19
Ha disminuido 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Sufijos en las constantes de C

Publicado por William Atef (11 intervenciones) el 17/04/2020 19:38:33
Hola buenas. Estoy leyendo el libro "C notes for professionals" y tengo una pregunta.
1
2
3
4
/* suffixes to describe width and signedness : */
long int i = 0x32; /* no suffix represent int, or long int */
unsigned int ui = 65535u; /* u or U represent unsigned int, or long int */
long int li = 65536l; /* l or L represent long int */
No entiendo lo de los sufijos, Que se suponen que hacen? Si yo quiero un unsigned int y lo declaro como tal ("unigned int i") pero después al final del número (digamos decimal) no pongo "u", ya no es unsigned?

Lo mismo con los floats.
1
2
3
4
5
float f = 0.314f;
/* suffix f or F denotes type float */
double d = 0.314;
/* no suffix denotes double */
long double ld = 0.314l; /* suffix l or L denotes long double */

Si yo declaro long double l pero en el número al que le asigno pongo 0.14 en vez de 0.14l, será un double normal? De que sirve entonces declarar el long o float o double al principio? Gracias
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

Sufijos en las constantes de C

Publicado por Nacho (76 intervenciones) el 17/04/2020 21:48:43
Como siempre, el ensamblador lo aclara todo.

1
2
3
4
5
6
7
8
unsigned int ui = 65535u; /* u or U represent unsigned int, or long int */
00D8591E  mov         dword ptr [ui],0FFFFh
    long int li = 65536l; /* l or L represent long int */
00D85925  mov         dword ptr [li],10000h
    unsigned int ui1 = 65535; /* u or U represent unsigned int, or long int */
00D8592C  mov         dword ptr [ui1],0FFFFh
    long int li1 = 65536; /* l or L represent long int */
00D85933  mov         dword ptr [li1],10000h

Una cosa es declarar una variable del tipo que sea y otra declarar el valor que asignas a esa variable del tipo que sea.
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 William Atef
Val: 19
Ha disminuido 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Sufijos en las constantes de C

Publicado por William Atef (11 intervenciones) el 17/04/2020 21:50:48
Hola. Ante todo muchas gracias por tu respuesta. La verdaed es que no entiendo de ensamblador. Podrías explicarme el código has posteado? Muchísimas gracias :)
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

Sufijos en las constantes de C

Publicado por Nacho (76 intervenciones) el 17/04/2020 22:59:33
La explicación está después. Puedes declarar una variale del tipo que sea, pero si asignas un valor a esa variable también tienes que especificar de qué tipo es ese valor que asignas.

Un ejemplo que se ve mejor:
1
2
3
float f = 0.314;
float a =12.8 * f;
float b =12.8f * f;

Eso da como desensamblado
1
2
3
4
5
6
7
8
9
10
11
12
float f = 0.314;
001493F7  movss       xmm0,dword ptr [__real@3ea0c49c (014DB3Ch)]
001493FF  movss       dword ptr [f],xmm0
    float a =12.8 * f;
00149404  cvtss2sd    xmm0,dword ptr [f]
00149409  mulsd       xmm0,mmword ptr [__real@3fd4189374bc6a7f (014DBE8h)]
00149411  cvtsd2ss    xmm0,xmm0
00149415  movss       dword ptr [a],xmm0
    float b =12.8f * f;
0014941A  movss       xmm0,dword ptr [__real@3f4ccccd (014DB54h)]
00149422  mulss       xmm0,dword ptr [f]
00149427  movss       dword ptr [b],xmm0

Podrá parecerte a ti lo mismo 12.8 que 12.8f, pero en un caso realiza la operación mulsd y en la otra mulss, y con ciertos valores puede dar un resultado completamente distinto.
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 William Atef
Val: 19
Ha disminuido 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Sufijos en las constantes de C

Publicado por William Atef (11 intervenciones) el 17/04/2020 23:14:18
Muchas gracias por tu respuesta. Ya me queda más claro. Crees que sería conveniente aprender ensamblador antes de aprender cualquier otro lenguaje para así entenderlos mejor? Gracias y un saludo
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

Sufijos en las constantes de C

Publicado por Nacho (76 intervenciones) el 18/04/2020 10:56:58
Rotundamente sí. Pero claro, es mi opinión. Otros opinan que no, sobre todo los que han intentado aprenderlo y no lo han conseguino.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar