Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Para Administradores de
Red
Ser Administrador de Red no es fácil, y menos si todos piensan que no hacen nada. La
verdad es que si uno de ellos está tranquilo y concentrado es porque algo bueno
viene creando en su mente, está optimizando, aprendiendo, ordenando, ellos no
están contentos si algo se puede hacer mejor y mas rápido.
Al aprender el lenguaje C las cosas para un Administrador de Red pueden salir mucho
mejor y más rápido, deja de estar atado a programas que usa para crear los que
realmente quiere y necesita. Conociendo el Lenguaje C las posibilidades de hacer
cosas asombrosas son muchas. Es cierto, también pueden salir mal, sobre todo si no
prestan atención a los detalles.
SCRIPT I
Variables en C
Lenguaje C
Script I – Variables en C
>> Variables
>> Direcciones de Memoria
>> Tamaño
>> Unidad Básica de Almacenamiento
>> Tipos de Datos Básicos en C
>> Tamaño de los tipos de datos básicos en C
>> Limites de los tipos de datos básicos en C
>> Cualificadores de los tipos de datos básicos en C
>> Cualificadores de Tamaño
>> Cualificadores de Valor
>> Resumen de Tipos de Datos
>> Tipos de Datos Especiales
>> Prueba de Concepto - Detrás de las Variables
>> Bonus Track - División de bytes & Protocolo IP
>> Bonus Track – Endianness & Lilliput
>> Tarea para la Casa
>> Anexos
>> Bibliografía
Lenguaje C
VARIABLES
Las variables almacenan datos, eso no tiene
ninguna novedad.
int
El problema es que en C, debemos conocer
QUE ES REALMENTE una variable y DE QUE
ESTA COMPUESTA
DIRECCIONES DE MEMORIA
int
Las variables almacenan datos, PERO nadie
se pregunto en donde se guardan esos
datos…
TAMAÑO
int
Las variables almacenan datos en
memoria, PERO nadie se pregunto hasta
ahora que tamaño ocupan en memoria 32 bits
TAMAÑO
int
Las variables almacenan datos en memoria
que ocupan espacio según su tipo de dato y
son identificadas a través de su dirección de 32 bits
memoria. PERO se olvidaron de preguntar
cual el tamaño mínimo que podemos 10 edad
guardar
0x0361a71
Lenguaje C
0000 0000 =0
1 1 1 1 1 1 1 1 0000 0001 =1
0000 0010 =2
char
8 bits
int
32 bits
float
32 bits
double
64 bits
Lenguaje C
char 0 a 255
CUALIFICADORES DE TAMAÑO
short int
16 bits
int
32 bits
long int
64 bits
Lenguaje C
CUALIFICADORES DE TAMAÑO
¿Y nuestro
querido char
char porque no
8 bits
tiene
cualificadores
de tamaño?
Lenguaje C
CUALIFICADORES DE VALOR
unsigned char
8 bits
unsigned int
32 bits
unsigned short
16 bits
unsigned
64 bits long
Lenguaje C
Nota: Los tipos de datos float, double y long double no usan cualificadores de valor (signed o unsigned)
Lenguaje C
Nota: Los tipos de datos mostrados son de un servidor Red Hat 6.2 64 bits , es posible que los valores difieran en otros SO
Lenguaje C
bool
Nótese que usamos el header
stdbool.h para poder usar el
tipo de dato bool
Nota: Una confusión común es no tener claro si 1 es FALSO o VERDADERO. Una forma
sencilla de recordarlo es preguntarse cuanto vale un billete FALSO
Lenguaje C
10
0x7ffffc127f27 0x7ffffc127f26 0x7ffffc127f25 0x7ffffc127f24
32 bits
Lenguaje C
???
Ir a siguiente dirección de memoria
DEMOSTRADO !
Nota: EL orden de los caracteres se debe a que se la arquitectura trabaja con LittleEndian del cual trataremos ma adelante
Lenguaje C
DEMOSTRADO !
El uso del tipo de dato void suele utilizarse en programas complejos que requieren alta
velocidad y flexibilidad en la manipulación de datos. Su desventaja es lo peligroso que puede
llegar a ser y lo engorroso en su sintaxis
Lenguaje C
BONUS TRACK
1 byte Dividiendo los bytes
0x0361a71
Lenguaje C
BONUS TRACK
1 byte Dividiendo los bytes
BONUS TRACK
1 byte Dividiendo los bytes
0x0361a71
Lenguaje C
BONUS TRACK
1 byte Dividiendo los bytes
int dia_semana = 7;
3 bits 5 bits int dia_mes = 31;
0x0361a71
Lenguaje C
BONUS TRACK
1 byte Dividiendo los bytes
struct fecha{
3 bits 5 bits unsigned char dia_semana:3;
unsigned char dia_mes:5;
1 1 1 1 1 1 1 1 };
0x0361a71
Lenguaje C
BONUS TRACK
1 byte Dividiendo los bytes
Wow !
0x0361a71
Lenguaje C
BONUS TRACK
Prueba de
Concepto
Demostrado !
Se puede reducir
significativamente
el tamaño de las
variables
agrupándolas en
estructuras y
dividiendo sus
bytes.
Lenguaje C
Demostrado !
10
0x7ffffc127f27 0x7ffffc127f26 0x7ffffc127f25 0x7ffffc127f24
¿00000765 o 76500000 ?
10
0 0 0 0 1 0 1 0
A algunos le resulta razonable la 2da forma hasta
que se encuentran con el problema de numerar
7650 o 76500
0x0361a71
Lenguaje C
Demostrado !
No hay ningún problema para almacenar 1 byte. El problema viene cuando queremos
almacenar información multibyte (tipos de dato diferentes de char)
Los nombres fueron extraídos de la novela «Los viajes de Gulliver» que relata la
disputa en Lilliput por la forma de comer los huevos cocidos. Unos exigían que debía
ser por la parte pequeña (Little Endian) y otros por la parte grande (Big Endian)
32 bits ( 4 bytes)
Prueba de Concepto
Demostrado !
Anexos
¿Qué necesito para programar en C bajo Linux? Nota: La extensión .exe es
solo para referencia
gcc, gdb, vim sencilla de que se trata
de un ejecutable, no es
¿Cómo compilar un programa C en Linux? necesario por lo tanto
agregarle dicha extensión
gcc mi-programa.c -g -o mi-programa.exe en realidad
Bibliografia
The C Programming Language, 2nd Edition, B. Kernighan, Dennis Ritchie.
Bibliografia
Bit Numbering (http://en.wikipedia.org/wiki/Bit_numbering)
Endianness (http://en.wikipedia.org/wiki/Endianness)
White Paper: Endianness or Where is Byte 0?. Bertrand Blanc, Bob Maaraoui