Modificadores del tipo entero básico: unsigned, long y short. La especificación del lenguaje garantiza el cumplimiento de la siguiente desigualdad: short [int] <= int <= long [int]. Como regla general, los compiladores asignan al tipo short un tamaño de dieciséis bits y al tipo long un tamaño de treinta y dos bits. El tipo int podrá tener el tamaño del tipo long o el del tipo short.#include <stdio.h>
int main() {
unsigned x = 100;
printf("\nBase diez: %d, Formato octal: %o, Formato hexadecimal: %x.\n", x, x, x);
system("pause");
return 0;
}
Ejercicio: Escribir un programa que muestre en pantalla el rango de representación de un entero largo con signo y de un entero largo sin signo. El especificador de formato empleado para imprimir un entero largo con signo es %ld y el utilizado para imprimir un entero largo sin signo es %lu.#include <stdio.h>
int main() {
short x = 0x7fff;
unsigned short y = 0xffff;
printf("\nRango de un entero corto con signo: [%hd, %hd].", x + 1, x);
printf("\nRango de un entero corto sin signo: [%hu, %hu].\n\n", y + 1, y);
system("pause");
return 0;
}
Cuando se usa un código ASCII, se debe tener en cuenta la diferencia entre un número y un carácter numérico representativo de una cifra.#include <stdio.h>
int main() {
unsigned char ch;
printf("\nIntroduce un carácter: ");
scanf("%c", &ch);
printf("El código de %c es %u.\n\n", ch, ch);
system("pause");
return 0;
}
Existen ciertos caracteres no imprimibles, los cuales representan acciones a ejecutar por el ordenador, tales como el retroceso, el salto de línea, el pitido del altavoz, etc. Para representarlos se pueden emplear las secuencias de escape.#include <stdio.h>
int main() {
char entero = 4;
char cifra = '4';
printf("\nValor entero: %d, valor cifra: %d.\n", entero, cifra);
system("pause");
return 0;
}
El compilador supone que todas las constantes de punto flotante que aparecen en el programa son de tipo double, a fin de asegurar la máxima precisión en los cálculos.#include <stdio.h>
int main() {
float num1 = -1.56E+12, num2 = 2.87e-3;
double num3 = 35e2;
printf("\nnum1: %e, num2: %e, num3: %e.\n", num1, num2, num3);
system("pause");
return 0;
}
Ejercicio: Modificar el programa del ejemplo 1.6 para que, además de imprimir el valor de las variables en notación exponencial, imprima también el valor de éstas en notación decimal.#include <stdio.h>
int main() {
float valor = 32000.0;
printf("\n%f equivale a %e.\n", valor, valor);
system("pause");
return 0;
}
El tipo long double permite declarar variables reales destinadas a la realización de cálculos de alta precisión.
#include <stdio.h>
int main() {
long double x = 1.0;
printf("\nEl tipo \"long double\" tiene %d bytes.\n", sizeof(x));
system("pause");
return 0;
}
#include <stdio.h>
int main() {
unsigned n = 0;
printf("\nCinco primeros naturales: ");
n++; /* 1 */
printf("%u, ", n);
n++; /* 2 */
printf("%u, ", n);
n++; /* 3 */
printf("%u, ", n);
n++; /* 4 */
printf("%u, ", n);
n++; /* 5 */
printf("%u.\n", n);
system("pause");
return 0;
}
#include <stdio.h>
int main() {
int t = 4, x = 5, y = -6;
t = t * (10 * x + 5 * y + 5);
printf("\nExpresión original: t -> %d.", t);
t = 4; /* restaurar valor inicial */
t *= 10 * x + 5 * y + 5;
printf("\nExpresión modificada: t -> %d.\n\n", t);
system("pause");
return 0;
}
#include <stdio.h>
int main() {
int cierto, falso;
cierto = (10 > 2); /* expresión cierta */
falso = (10 == 2); /* expresión falsa */
printf("\nCierto: %d, falso: %d.\n", cierto, falso);
system("pause");
return 0;
}
#include <stdio.h>
int main() {
int a, b;
printf("\nIntroducir dos valores de verdad (uno o cero): ");
scanf("%d %d", &a, &b);
printf("\n%d && %d -> %d.", a, b, a && b);
printf("\n%d || %d -> %d.", a, b, a || b);
printf("\n!%d -> %d.", a, !a);
printf("\n!%d -> %d.\n\n", b, !b);
system("pause");
return 0;
}
#include <stdio.h>
int main() {
printf("\nchar -> %d.", sizeof(char));
printf("\nshort -> %d.", sizeof(short));
printf("\nint -> %d.", sizeof(int));
printf("\nlong -> %d.", sizeof(long));
printf("\nfloat -> %d.", sizeof(float));
printf("\ndouble -> %d.", sizeof(double));
printf("\nlong double -> %d.\n\n", sizeof(long double));
system("pause");
return 0;
}