2012-06-01 23 views
6

Entiendo que 1 byte contendrá un número de 0-255. Y que un número de 16 bits está entre 0-65535.cómo convertir dos bytes en un número de 16 bits?

Si intento representar un número de 16 bits usando dos registros de 8 bits separados ... ¿cómo hago eso? ¿Cómo funcionan las matemáticas?

Gracias!

+1

¿Qué arquitectura y ensamblador? –

+1

No hay nada que convertir. Simplemente comience a tratar el par de registros como un par que representa un número de 16 bits. El funcionamiento de las matemáticas depende de las instrucciones que tenga disponibles en su plataforma. – harold

+0

No hay pista. Estoy trabajando con un programador de sistemas integrados. Él dice que es limitado. Él puede enviarme un byte hexadecimal. Y luego otro byte hexadecimal Y debería ser capaz de convertirlos en un número de 16 bits. Pero no estoy seguro de cómo. –

Respuesta

10

La matemática funciona de la siguiente manera:

sixteenBitNumber = 256*upperByte + lowerByte; 

con los cambios y las operaciones bit a bit:

sixteenBitNumber = (upperByte<<8) | lowerByte; 

En la mayoría de las CPU, incluso algunos son arcaicas de 8 bits, esta interpretación se realiza en el hardware: carga bytes en partes de un registro de 16 bits o en registros separados de 8 bits que pueden funcionar como un par de 16 bits, y el hardware funciona con los datos como si fuera un solo número de 16 bits.

1

En decimales ¿cómo tomo 7 y 9 y hago 79? (7 * 10) +9 o 12 y 34 y hacer 1234? (12 * 100) +34. No diferente 0x12 y 0x34 y hacer 0x1234. (0x12 * 0x100) + 0x34. Mucho más limpio para cambio de bit (0x12 < < 8) + 0x34. puede o está bien (0x12 < < 8) | 0x34.

0

¿Quieres trabajar con ellos juntos? Es fácil

Digamos que usted tiene el número 2643 - en la base 10. si lo divide en mitades, tendrá algo así como 26 y 43, ¿verdad? bueno, sabes que si multiplicas por dos, tienes que multiplicar de derecha a izquierda y llevar. Haga eso - multiplique el lado derecho, y si hay desbordamiento, agréguelo al lado izquierdo y luego multiplique el lado izquierdo.

Por ejemplo:

(37 82) *2  ->  ((37*2) + overflow) + 64  ->  (74 + 1) 64  ->  75 64 

Vea cómo eso funcionó? Lo mismo aplica para la división: ¿necesita llevar? Roba desde el bit más alto. ¿Quieres agregar o quitar números? ¡No es tan difícil después de todo!

Los números binarios funcionan de la misma manera.

(01110110 10110011) * 10 = (0)  <-  1110110(1)  <-  01100110 

Básicamente se calcula el extremo inferior, luego se calcula el extremo superior, luego se aplica el desbordamiento.

Cuestiones relacionadas