Variables y tipos en C

 

 

 

Variables y tipos en c 1

 

Una introducción al manejo de variables en C y los tipos básicos

C es un lenguaje tipado estáticamente.

Esto significa que cualquier variable tiene un tipo asociado, y este tipo se conoce en el momento de la compilación.

Esto es muy diferente a cómo se trabaja con variables en Python, JavaScript, PHP y otros lenguajes interpretados.

Cuando se crea una variable en C, hay que especificar el tipo de variable en la declaración.

En este ejemplo inicializamos una variable agecon el tipo int:

int age;

Un nombre de variable puede contener cualquier letra mayúscula o minúscula, puede contener dígitos y el carácter de guión bajo, pero no puede comenzar con un dígito. AGEy Age10son nombres de variables válidos, 1ageno lo es.

También puedes inicializar una variable en la declaración, especificando el valor inicial:

int age = 37;

Una vez que declaras una variable, puedes usarla en el código de tu programa y puedes cambiar su valor en cualquier momento, usando el =operador por ejemplo, como en age = 100;, siempre que el nuevo valor sea del mismo tipo.

En este caso:

#include stdio.hint main(void) {int age = 0;age = 37.2;printf("%u", age);}

El compilador emitirá una advertencia en el momento de la compilación y convertirá el número decimal en un valor entero.

Los tipos de datos integrados de Cint son , char, short, long, float, double, long double. Descubramos más sobre ellos.

Números enteros

C nos proporciona los siguientes tipos para definir valores enteros:

  • char
  • int
  • short
  • long

La mayoría de las veces, probablemente usarás un intpara almacenar un número entero. Pero en algunos casos, es posible que quieras elegir una de las otras tres opciones.

El chartipo se utiliza habitualmente para almacenar letras del diagrama ASCII, pero se puede utilizar para almacenar números enteros pequeños de -128hasta 127. Ocupa al menos 1 byte.

inttoma al menos 2 bytes. shorttoma al menos 2 bytes. longtoma al menos 4 bytes.

Como puede ver, no tenemos la garantía de que los valores sean los mismos para diferentes entornos. Solo tenemos una indicación. El problema es que los números exactos que se pueden almacenar en cada tipo de datos dependen de la implementación y la arquitectura.

 

Le garantizamos que shortno es más largo que int. Y le garantizamos longque no es más corto que int.

El estándar de especificaciones ANSI C determina los valores mínimos de cada tipo, y él podemos al menos saber cuál es el valor mínimo que podemos esperar tener a nuestra disposición.

Si estás programando C en un Arduino, cada placa tendrá diferentes límites.

En una placa Arduino Uno, intalmacena un valor de 2 bytes, que va de -32,768a 32,767. En un Arduino MKR 1010, intalmacena un valor de 4 bytes, que va de -2,147,483,648a 2,147,483,647. Una diferencia bastante grande.

En todas las placas Arduino, shortalmacena un valor de 2 bytes, que va desde -32,768hasta 32,767. longalmacena 4 bytes, que van desde -2,147,483,648hasta 2,147,483,647.

Enteros sin signo

Para todos los tipos de datos anteriores, podemos anteponer unsignedel valor inicial del rango en 0, en lugar de un número negativo. Esto podría tener sentido en muchos casos.

  • unsigned charoscilará entre 0al menos255
  • unsigned intoscilará entre 0al menos65,535
  • unsigned shortoscilará entre 0al menos65,535
  • unsigned longoscilará entre 0al menos4,294,967,295

El problema del desbordamiento

Teniendo en cuenta todos esos límites, podría surgir una pregunta: ¿cómo podemos asegurarnos de que nuestros números no superen el límite? ¿Y qué sucede si lo superamos?

Si tienes un unsigned intnúmero en 255 y lo incrementas, obtendrás 256 como resultado. Como se esperaba. Si tienes un unsigned charnúmero en 255 y lo incrementas, obtendrás 0 como resultado. Se reinicia a partir del valor inicial posible.

Si tienes un unsigned charnúmero 255 y le sumas 10, obtendrás el número 9:

#include stdio.hint main(void) { unsigned char j = 255; j = j + 10; printf("%u", j); /* 9 */}

Si tiene un valor con signo, el comportamiento no está definido. Básicamente, le proporcionará un número enorme que puede variar, como en este caso:

#include stdio.hint main(void) { char j = 127; j = j + 10; printf("%u", j); /* 4294967177 */}

En otras palabras, C no te protege de sobrepasar los límites de un tipo. Debes encargarte de esto tú mismo.

Advertencias al declarar el tipo incorrecto

Cuando declaras la variable y la inicializas con el valor incorrecto, el gcccompilador (el que probablemente estás usando) debería advertirte:

#include stdio.hint main(void) { char j = 1000;}
hello.c:4:11: warning: implicit conversion from 'int' to 'char' changes value from 1000 to -24 [-Wconstant-conversion] char j = 1000; ~ ^~~~1 warning generated.

Y también te advierte en las asignaciones directas:

 

#include stdio.hint main(void) { char j; j = 1000;}

Pero no si aumentas el número usando por ejemplo +=:

#include stdio.hint main(void) { char j = 0; j += 1000;}

Números de punto flotante

Los tipos de punto flotante pueden representar un conjunto de valores mucho más grande que los números enteros, y también pueden representar fracciones, algo que los números enteros no pueden hacer.

Utilizando números de punto flotante, representamos números como números decimales multiplicados por potencias de 10.

Es posible que vea números de punto flotante escritos como

  • 1.29e-3
  • -2.3e+5

y de otras maneras aparentemente extrañas.

Los siguientes tipos:

  • float
  • double
  • long double

Se utilizan para representar números con puntos decimales (tipos de punto flotante). Todos pueden representar números positivos y negativos.

Los requisitos mínimos para cualquier implementación de C son que floatpueda representar un rango entre 10^-37 y 10^+37, y generalmente se implementa utilizando 32 bits. doublePuede representar un conjunto más grande de números. long doublePuede contener incluso más números.

Las cifras exactas, al igual que con los valores enteros, dependen de la implementación.

En una Mac moderna, a floatse representa en 32 bits y tiene una precisión de 24 bits significativos, de los cuales 8 bits se utilizan para codificar el exponente. Un doublenúmero se representa en 64 bits, con una precisión de 53 bits significativos, de los cuales 11 bits se utilizan para codificar el exponente. El tipo long doublese representa en 80 bits, tiene una precisión de 64 bits significativos, de los cuales 15 bits se utilizan para codificar el exponente.

En su computadora específica, ¿cómo puede determinar el tamaño específico de los tipos? Puede escribir un programa para hacerlo:

#include stdio.hint main(void) { printf("char size: %lu bytesn", sizeof(char)); printf("int size: %lu bytesn", sizeof(int)); printf("short size: %lu bytesn", sizeof(short)); printf("long size: %lu bytesn", sizeof(long)); printf("float size: %lu bytesn", sizeof(float)); printf("double size: %lu bytesn", sizeof(double)); printf("long double size: %lu bytesn", sizeof(long double));}

En mi sistema, un Mac moderno, imprime:

char size: 1 bytesint size: 4 bytesshort size: 2 byteslong size: 8 bytesfloat size: 4 bytesdouble size: 8 byteslong double size: 16 bytes

Tips C




Tal vez te puede interesar:

  1. Introducción a React
  2. Agregar evento de clic a los elementos DOM devueltos desde querySelectorAll
  3. Cómo cambiar el valor de un nodo DOM
  4. Cómo comprobar si un elemento DOM tiene una clase

Variables y tipos en C

Números enterosEnteros sin signoEl problema del desbordamientoAdvertencias al declarar el tipo incorrectoNúmeros de punto flotante

programar

es

2025-01-03

 

Variables y tipos en c 1
Variables y tipos en c 1

Si crees que alguno de los contenidos (texto, imagenes o multimedia) en esta página infringe tus derechos relativos a propiedad intelectual, marcas registradas o cualquier otro de tus derechos, por favor ponte en contacto con nosotros en el mail [email protected] y retiraremos este contenido inmediatamente

 

 

Update cookies preferences