Main Content

Valores binarios y hexadecimales

Puede representar números como valores binarios o hexadecimales. En algunos contextos, estas representaciones de números son más prácticas. Por ejemplo, se pueden representar los bits de un registro de hardware usando valores binarios. En MATLAB®, existen dos formas de representar valores hexadecimales y binarios:

  • Como literales. A partir de la versión R2019b, se pueden escribir valores hexadecimales y binarios como literales usando un prefijo apropiado como notación. Por ejemplo, 0x2A es un literal que especifica 42, y MATLAB lo almacena como un número, no como texto.

  • Como cadenas o vectores de caracteres. Por ejemplo, el vector de caracteres '2A' representa el número 42 como valor hexadecimal. Cuando represente un valor hexadecimal o binario usando texto, enciérrelo entre comillas. MATLAB almacena esta representación como texto, no como un número.

MATLAB tiene varias funciones para convertir números a y desde sus representaciones hexadecimal y binaria.

Escribir números enteros usando notación hexadecimal y binaria

Los literales hexadecimales comienzan con el prefijo 0x o 0X, mientras que los literales binarios comienzan con el prefijo 0b o 0B. MATLAB almacena el número escrito con esta notación como un entero. Por ejemplo, estos dos literales representan el número entero 42.

A = 0x2A
A = uint8
    42
B = 0b101010
B = uint8
    42

No use comillas cuando escriba un número utilizando esta notación. Use 0-9, A-F y a-f para representar dígitos hexadecimales. Use 0 y 1 para representar dígitos binarios.

De forma predeterminada, MATLAB almacena el número como el tipo entero sin signo más pequeño al que se pueda ajustar. Sin embargo, puede usar un sufijo opcional para especificar el tipo de entero que almacena el valor.

  • Para especificar tipos enteros sin signo de 8, 16, 32 y 64 bits, utilice los sufijos u8, u16, u32 y u64.

  • Para especificar tipos enteros con signo de 8, 16, 32 y 64 bits, utilice los sufijos s8, s16, s32 y s64.

Por ejemplo, escriba un literal hexadecimal para almacenarlo como un entero de 32 bits con signo.

A = 0x2As32
A = int32
    42

Cuando se especifican tipos enteros con signo, se pueden escribir literales que representen números negativos. Represente números negativos en forma de complemento de dos. Por ejemplo, especifique un número negativo con un literal usando el sufijo s8.

A = 0xFFs8
A = int8
    -1

Dado que MATLAB almacena estos literales como números, se pueden utilizar en cualquier contexto o función donde se usen arreglos numéricos. Por ejemplo, puede crear un arreglo de enteros con signo de 64 bits sin pérdida de precisión para enteros grandes.

C = [0xFF000000001F123As64 0x1234FFFFFFFFFFFs64]
C = 1x2 int64 row vector

   -72057594035891654    81997179153022975

Para comparar, cuando se convierte un arreglo de enteros grandes (mayores que flintmax) usando int64, se puede perder precisión porque MATLAB representa inicialmente una entrada de arreglo numérico como de doble precisión de forma predeterminada.

C_inaccurate = int64([-72057594035891654 81997179153022975])
C_inaccurate = 1x2 int64 row vector

   -72057594035891656    81997179153022976

Representar valores hexadecimales y binarios como texto

También puede convertir números enteros a vectores de caracteres que los representen como valores hexadecimales o binarios con las funciones dec2hex y dec2bin. Convierta un entero a hexadecimal.

hexStr = dec2hex(255)
hexStr = 
'FF'

Convierta un entero a binario.

binStr = dec2bin(16)
binStr = 
'10000'

Dado que estas funciones producen texto, úselas cuando necesite texto que represente valores numéricos. Por ejemplo, puede añadir estos valores a un título o a una etiqueta de gráfica, o escribirlos en un archivo que almacene números como sus representaciones hexadecimales o binarias.

Representar arreglos de valores hexadecimales como texto

La forma recomendada de convertir un arreglo de números a texto es utilizar la función compose. Esta función devuelve un arreglo de cadenas del mismo tamaño que el arreglo numérico de entrada. Para producir el formato hexadecimal, utilice %X como especificador de formato.

A = [255 16 12 1024 137]
A = 1×5

         255          16          12        1024         137

hexStr = compose("%X",A)
hexStr = 1x5 string
    "FF"    "10"    "C"    "400"    "89"

Las funciones dec2hex y dec2bin también convierten arreglos de números a texto representándolos como valores hexadecimales o binarios. Sin embargo, estas funciones devuelven arreglos de caracteres en los que cada fila representa un número del arreglo numérico de entrada, rellenado con ceros según sea necesario.

Convertir representaciones binarias a hexadecimales

Para convertir un valor binario a hexadecimal, comience con un literal binario y conviértalo a texto que represente su valor hexadecimal. Dado que un literal se interpreta como un número, lo puede especificar directamente como argumento de entrada a dec2hex.

D = 0b1111;
hexStr = dec2hex(D)
hexStr = 
'F'

Si comienza con un literal hexadecimal, puede convertirlo a texto que represente su valor binario usando dec2bin.

D = 0x8F;
binStr = dec2bin(D)
binStr = 
'10001111'

Operaciones bit a bit con valores binarios

Comúnmente, los números binarios se usan para representar bits. Por ejemplo, muchos dispositivos tienen registros que proporcionan acceso a un conjunto de bits que representa los datos de la memoria o el estado del dispositivo. Cuando se trabaja con este tipo de hardware, se pueden usar números en MATLAB para representar el valor de un registro. Utilice valores binarios y operaciones bit a bit para representar y acceder a determinados bits.

Cree un número que represente un registro de 8 bits. Resulta práctico comenzar con la representación binaria, pero el número se almacena como un número entero.

register = 0b10010110
register = uint8
    150

Para obtener o establecer los valores de determinados bits, utilice operaciones bit a bit. Por ejemplo, utilice las funciones bitand y bitshift para obtener el valor del quinto bit. (Desplace ese bit a la primera posición, de forma que MATLAB devuelva un 0 o un 1. En este ejemplo, el quinto bit es un 1).

b5 = bitand(register,0b10000);
b5 = bitshift(b5,-4)
b5 = uint8
    1

Para invertir el quinto bit a 0, utilice la función bitset.

register = bitset(register,5,0)
register = uint8
    134

Dado que register es un número entero, utilice la función dec2bin para mostrar todos los bits en formato binario. binStr es un vector de caracteres y representa el valor binario sin prefijo 0b antepuesto.

binStr = dec2bin(register)
binStr = 
'10000110'

Consulte también

| | | | | | | |

Temas relacionados

Sitios web externos