Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: palacio29 en 20 Febrero 2017, 00:49 AM

Título: Porque es posible realizar esta operacion en C?
Publicado por: palacio29 en 20 Febrero 2017, 00:49 AM
Tengo el siguiente codigo

#include <stdio.h>
#include <stdlib.h>

int main()
{

char d='7';


printf("%d%d",(((d-'0')*2)/10),(((d-'0')*2)%10));

    return 0;
}



Lo que no entiendo es porque es posible realizar operaciones matematicas si es que el 7 ingresado no es un numero, si no que es el caracter 7 y esta ingresado como char...Creo que me falta algo de concepto para entenderlo.
Título: Re: Porque es posible realizar esta operacion en C?
Publicado por: engel lex en 20 Febrero 2017, 01:00 AM
porque a nivel de codigo un char es un sistema de 8 bits que se representa como letra visualmente... pero al ser binario puede ser usado como numero, solo que '7' no representará el numero 7 sino la posición de el simbolo '7' en la tabla ascii que sería 55
Título: Re: Porque es posible realizar esta operacion en C?
Publicado por: palacio29 en 20 Febrero 2017, 01:07 AM
Y si cambio el '7' y pongo una 'a'...porque el resultado da 98?

#include <stdio.h>
#include <stdlib.h>

int main()
{

char d='a';


printf("%d%d",(((d-'0')*2)/10),(((d-'0')*2)%10));

    return 0;
}
Título: Re: Porque es posible realizar esta operacion en C?
Publicado por: engel lex en 20 Febrero 2017, 01:12 AM
es más facil que simplifiques el codigo y dejes


printf("%d",d);


y compares con una tabla ascii

(http://www.webtutoriales.com/tutoriales/images/2/content_tabla_ascii.gif)
Título: Re: Porque es posible realizar esta operacion en C?
Publicado por: palacio29 en 20 Febrero 2017, 01:24 AM
Cita de: engel lex en 20 Febrero 2017, 01:12 AM
es más facil que simplifiques el codigo y dejes


printf("%d",d);


y compares con una tabla ascii

(http://www.webtutoriales.com/tutoriales/images/2/content_tabla_ascii.gif)


Hola, gracias ya lo entendi!!...estaba confundido porque pense que los numeros empezaban en el 0 en la ascii,...pero empiezan en el 48. :silbar:..y como igualmente el resultado del ejercicio que estaba haciendo me estaba dando bien en ese caso  me estaba confundiendo.