Decimal al código fuente
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 p>
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); p>
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); p>
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)