Red de conocimiento informático - Conocimiento informático - Decimal al código fuente

Decimal al código fuente

Matlab proporciona una función de sistema dec2bin, que se puede utilizar para la conversión binaria de números decimales, ¡pero la función es limitada!

Escriba help dec2bin en matlab de la siguiente manera:

DEC2BIN convierte un entero decimal en una cadena binaria.

DEC2BIN(D) devuelve la representación binaria de D en forma de cadena.

d debe ser un número entero no negativo menor que 2^52.

DEC2BIN(D, N) produce una representación binaria que contiene al menos

n bits.

Ejemplo

dec2bin(23) devuelve "10111"

Se puede ver que esta función solo puede convertir números enteros, pero no puede hacer nada con números no enteros. . Por lo tanto, yo mismo escribí un pequeño programa de Matlab y, por cierto, lo publiqué. ¡Espero que pueda ayudar a las personas necesitadas! ^_^

1. El decimal se convierte en un número binario

Hay dos parámetros de entrada, uno es el número decimal de entrada (menos de 1) y el otro es el dígito binario especificado después del número de conversión! El código fuente del programa es el siguiente:

y=dectobin(innum, N)

Convertir número decimal a número binario

Los parámetros de entrada son innum y n .

inum es el decimal de entrada.

N es el número de dígitos del número binario convertido especificado.

if(innum gt; 1)|(N == 0) determina la validez de la entrada.

disp('¡Error!');

Retorno;

Fin

cuenta = 0; tempnum = innum

Registro = cero (1, N);

Cuando (sustantivo)

cuenta = cuenta 1 longitud menor que n

if(count gt; n)

n = 0;

Retorno;

Fin

tempnum = tempnum * 2 ; Decimal se convierte a binario y se redondea a 2.

Si tempnum gt1

Registro (recuento) = 1

tempnum = tempnum-1

elseif(tempnum==1; )

Registro (recuento) = 1

n = 0; Detener bucle

Otro

Registro (recuento) = 0;

End

End

y = record;

2. Si desea convertir números enteros, ¡simplemente llame a dec2bin de matlab directamente!

3. Los números no enteros mayores que 1 se pueden dividir en partes enteras y decimales para su procesamiento:

Puede utilizar la función Floor de Matlab para realizar las siguientes operaciones en el ingrese el número (establecido en inum) Redondo, luego use inum-floor (inum) para obtener la parte decimal y llame a la función anterior para obtener la expresión binaria.

Tenga en cuenta que aquí hay un pequeño problema, es decir, el valor de retorno de la función dec2bin es una matriz de caracteres, por lo que primero debemos convertirlo en una matriz doble. Double() se puede utilizar para conversiones para obtener valores de código ASCII. ¡Resta 48 para obtener una secuencia de 0,1 de tipo matriz doble!

El código del programa es el siguiente:

[num, numint, numf]=dectobin1(innum, N)

Convertir números decimales a números binarios

La entrada es un número decimal innum, con n decimales.

La salida son los tres parámetros num, num, numint, numf.

num es la forma binaria de la salida.

Numint es una expresión binaria con parte entera.

numf es una expresión binaria con parte decimal.

sep = 5; separador de partes enteras y decimales

Si(mod(innum, 1)==0) determina si la entrada es un número entero, mod es la función restante.

numint = dec 2 bin(innum);

numint = double(numint)-48;

numf=zeros(1,N);

numint = double(numint)-48;

numf=zeros(1,N);

p>

num =[numit, sep, numf ];

Retorno

Fin;

La entrada no es un número entero.

nint = floor(innum); parte entera

nf = innum-nint; parte decimal

RES _ nint = dec 2 bin(nint); /p>

RES _ nint = double(RES _ nint)-48;

res_nf=dectobin(nf, N

numint = res _ nint

numf = res_nf

num =[numit, sep, numf];

¡La función dectobin es la función decimal a binaria superior!

¿Parece haber sido completado? No, hay otro problema, que es el caso de los números negativos. Aquí usamos complementos. Si la entrada es positiva, la expresión binaria permanece sin cambios. Si es un número negativo, se invierte bit a bit y se suma 1. Por lo tanto, es necesario agregar juicio de números negativos y complementar funciones de conversión sobre la base de las funciones anteriores. El resultado de la representación final puede tener el formato 1QN. El procedimiento para la conversión en complemento a dos es el siguiente.

[numo, numinto, numfo]=conv(numint, numf, flag)

Representación complementaria de números binarios

El parámetro de entrada es la parte entera de numint La expresión binaria de , la expresión binaria de la parte fraccionaria de numf y la bandera negativa.

El parámetro de salida es el complemento de la entrada numo, el complemento de la parte entera de numinto y el complemento de la parte decimal de numfo.

if (flag == 0)

numo=[0, numint, 5, numf] número positivo

numinto = numint

numfo = numf

De lo contrario, los números negativos, enteros y partes decimales se invierten bit a bit y se suman en 1.

l 1 = longitud (numint);

l2 = longitud (numf

num = [numit, numf]; >l = l 1 L2;

Porque i=1: l

Si num(i)==1 retrocede poco a poco

num(I) = 0;

Otro

num(I)= 1;

Fin

Fin

Revertir Luego agrega uno.

temp _ l = l

while(temp_l~=0)

Si num(temp_l)==0, el bit más bajo es 0.

num(temp _ l) = 1

temp _ l = 0; finalizar bucle

Otros

num(temp _ l)= 0;

temp_l = temp_l-1;

Fin

Fin

l 1 = longitud ( numint);

Porcentaje de I=1: l1

si numint(i)==1 inversión bit a bit

numint(I)= 0 ;

En caso contrario

numint(I)= 1;

Fin

Fin

l2 = longitud (numf);

Porcentaje de I = 1: l2

if numf(i) ==1 negación bit a bit

numf(I)= 0;

En caso contrario

numf(I)= 1;

Fin

Fin

Agregar uno después de la reversión

temp _ l 1 = l 1;

while(temp_l1~=0)

Si numint(temp_l1)==0, el bit más bajo es 0.

numint(temp _ l 1) = 1;

temp _ l 1 = 0; finalizar bucle

En caso contrario

numint( temp_l 1)= 0;

temp_l 1 = temp_l 1-1;

Fin

Fin

Agregar uno después de la inversión

temp _ l2 = l2

while(temp_l2~=0)

Si numf(temp_l2) ==0, el bit más bajo es 0.

numf(temp _ L2)= 1;

temp _ L2 = 0; finalizar bucle

En caso contrario

numf(temp _ L2)= 0;

temp_L2 = temp_L2-1;

Fin

num into = num(1:l 1);

Fin p>

numfo = num(l 1 1: l);

numinto = numint

numfo = numf

numo =[1, numinto, 5, numfo];

Fin

5. Finalmente, use una función principal para conectar las subfunciones anteriores.

[numo,numinto,numfo]=decimal2bin(innum,N)

[num1,num in 1,numf1,flag 1]=dectobin 1(in num,N);

[numo,numinto,numfo]=conv(numint1,numf1,flag1)