DATOS
En computacin es posible medir las
cantidades de la informacin. La unidad
bsica de informacin es el bit, cuyos
valores establecen uno de dos
posibilidades mutuamente excluyentes.
Los dgitos binarios 0 y 1 se usan para
representar los dos estados posibles de un
bit particular. Dados n bits, se usa una
cadena de unos y ceros para representar
sus especificaciones.
BITS
El mtodo mas difundido para interpretar especificaciones
de bits como enteros no negativos es el sistema numrico
binario. En este sistema la posicin del bit en el extremo
derecho representa 20, lo cual es 1, la siguiente 21, lo
cual es 2 y as sucesivamente. Si aparece un 1 en esa
posicin de bit particular, se incluye en la suma de
potencia de 2 representada por la posicin de tal posicin
de bit. Pero si aparece un 0 no se incluye en la suma.
Hay dos mtodos que se usan con frecuencia para
representar nmeros binarios negativos. En el primero
denominado notacin de complemento a uno, se
representa un numero negativo cambiando cada bit en su
valor absoluto a las especificaciones de bit opuesta.
BITS
Ejemplo:
00100110 representa 38
11011001 representa -38
Una cadena de bits que empieza con un 0 representa un numero positivo, en
tanto una cadena de bits que inicia con 1 representa un numero negativo.
El segundo mtodo se denomina notacin de complemento a dos. Aqu se
agrega un 1 a la representacin del complemento a uno de un numero
negativo.
Ejemplo:
Considere el 0 utilizando 8 bits: 00000000. En complemento a uno es:
11111111, lo cual es un 0 negativo en tal notacin. Agregamos un 1 para
realizar el complemento a dos 100000000, lo cual tiene 9 bits de longitud.
Como solo se permitan 8 bits, se descarta el bit de la extrema izquierda,
dejando 00000000 como menos 0.
Sintaxis
~cast-expresion
Ejemplo
signed int s1 = ~2; // equivale a:
signed int s1 = compl 2;
signed int s2 = ~s1 + 2;
Tipos de operaciones
Operaciones bit a bit: Ejecutan las operaciones
lgicas AND, OR, XOR, NOT, etc, sobre los bits
individuales de los operandos.
Operaciones de Desplazamiento: Desplazan los
bits de los operandos hacia la derecha o hacia
la izquierda una o ms posiciones.
Operaciones de Rotacin: Rotan los bits del
operando hacia la derecha o hacia la izquierda
una o ms posiciones. Pueden usar o no el flag
del acarreo como un bit adicional en la
rotacin.
Extrayendo bits
El AND se puede usar para extraer
determinados bits de un valor. Si en
un byte, por ejemplo, tenemos
representados dos dgitos
hexadecimalesempaquetados, uno
en los 4 bits superiores y el otro en
los 4 bits inferiores.
big-endian: Primero se almacena el byte mas significativo (caso Java, protocolo IP,
motorota, PowerPC)
little-endian: Primero se almacena el byte menos significativo (caso Pentium Intel)
Estas palabras se usan para referirse a las dos formas en que se pueden guardar
los nmeros que ocupan ms de un byte.
Por ejemplo el nmero 5. Si se expresa en binario con 4 bits, su equivalencia es
0101. Si se hace con 8 bits, sera 00000101. Pero si se usa ms de un byte para
representarlo, por ejemplo porque se tratara de un nmero "entero corto",
usando la nomenclatura del lenguaje Java o C, se tiene que el nmero 5
equivaldra a 16 dgitos binarios: 00000000 00000101.
Por tanto, ahora este nmero 5 queda representado como 2 bytes. El de la izquierda
es el byte ms significativo (MSB) y el de la derecha es el bit menos significativo (LSB).
Estos nombres vienen de que un cambio en el byte de la derecha hace que el nmero
cambie poco (por ejemplo, 00000000 00000100 = 4 en decimal), mientras que un
cambio en el byte de la izquierda provoca cambios mucho ms grandes (00000001
00000101 = 261 en decimal).
De acuerdo a la arquitectura de una computadora, puede ocurrir que esos dos bytes
se guarden en el orden que hemos visto: 00000000 00000101 (primero el MSB y luego
el LSB) o al contrario (00000101 00000000).
El primer formato (MSB LSB) es lo que se conoce como Big Endian, porque eso de que
el extremo ms grande aparece en primer lugar. El segundo formato (LSB MSB) es lo
que se conoce como Little Endian, porque se almacena primero el dato ms pequeo.
CONT
Se ha visto como los apuntadores nos dan control
sobre las operaciones de bajo nivel de la memoria.
Muchos programas (por ejemplo, aplicaciones del
tipo sistemas) operan actualmente a bajo nivel
donde bits individuales deben ser manipulados.
La combinacin de apuntadores y operadores a
nivel bit hacen de C til para muchas aplicaciones
de bajo nivel y pueden casi reemplazar al cdigo
ensamblador. (Solamente un 10%
aproximadamente de UNIX esta en cdigo
ensamblador el resto es C.)
Campos de bit
Al contrario de la mayora de los lenguajes de
programacin, C tiene un mtodo predefinido para acceder
a un nico bit en un byte. Este mtodo puede ser utilsimo
por una serie de razones:
-Si el almacenamiento es limitado, se pueden almacenar
varias variablesbooleanasen un byte;-ciertas interfaces de
dispositivo transmiten informacin que se codifica en bits
dentro de un byte;-ciertas rutinas de encriptacin necesitan
acceder a los bits en un byte.El mtodo que C usa para
acceder a los bits se basa en la estructura. Un campo de bit
es un tipo especial de estructura que define la longitud en
bits que tendr cada elemento. El formato general de una
definicin de campo de bit es:
Campos de bit
structnomb_estruct {tipo nombre_1 : longitud;
tipo nombre_2 : longitud;
tipo nombre_n : longitud;
}
Se debe declarar un campo de bit
comoint,unsignedosigned. Se debe declarar los
campos de bits de longitud 1 comounsigned, ya que un
bit nico no puede tener signo.
Por ejemplo, considerar esta definicin de estructura:
struct empaquetado { unsigned int b1:1; unsigned int
b2:1; unsigned int b3:1; unsigned int b4:1; unsigned int
tipo:4; unsigned int ent_raro:9; } paquete;
CORRIMIENTO DE BITS
Las instrucciones de corrimiento, que son parte
de la capacidad lgica de la computadora,
pueden realizar las siguientes acciones:
1. Hacer referencia a un registro o direccin de
memoria.
2. Recorre bits a la izquierda o a la derecha.
3. Recorre hasta 8 bits en un byte, 16 bits en una
palabra y 32 bits en una palabra doble.
4. Corrimiento lgico (sin signo) o aritmtico (con
signo).
CORRIMIENTO DE BITS
El segundo operando contiene el
valor del corrimiento, que es una
constante (un valor inmediato) o una
referencia al registro CL. Para los
procesadores 8088/8086, la
constante inmediata solo puede ser
1; un valor de corrimiento mayor que
1 debe estar contenido en el registro
CL. Procesadores posteriores
permiten constantes de corrimiento