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
yu64
.Para especificar tipos enteros con signo de 8, 16, 32 y 64 bits, utilice los sufijos
s8
,s16
,s32
ys64
.
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
bin2dec
| bitand
| bitshift
| bitset
| dec2bin
| dec2hex
| hex2dec
| sprintf
| sscanf
Temas relacionados
- Convertir texto a valores numéricos
- Convertir valores numéricos a texto
- Dar formato a texto
- Operaciones bit por bit
- Comprobar la redundancia cíclica