Red de conocimiento informático - Conocimientos de programación - Escriba un programa matlab para ingresar números y letras y luego convertirlos a binario

Escriba un programa matlab para ingresar números y letras y luego convertirlos a binario

Matlab proporciona una función de sistema dec2bin, que se puede utilizar para convertir números decimales a binarios, ¡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 como una cadena.

D debe ser un número entero no negativo más pequeño que 2 ^52

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

N bits.

Ejemplo

dec2bin(23) devuelve '10111'

Se puede ver que esta función solo puede convertir números enteros y no puede hacer nada con números no enteros. Por lo tanto, escribí un subprograma de Matlab y lo publiqué por cierto. Espero que pueda ser útil para quienes lo necesiten. ¡Ayuda! ^_^

1. Convertir número decimal a binario

Hay 2 parámetros de entrada, uno es el decimal de entrada ( menor que 1), y el otro es el número binario después de la conversión especificada. Número de dígitos. El código fuente del programa es el siguiente:

y=dectobin(innum,N)

%Convertir número decimal a binario

%Los parámetros de entrada son innum y N

%innum es la fracción decimal de entrada

%N es el número de dígitos binarios después de la conversión especificada

if (innum>1)|(N == 0 )% determina la validez de la entrada

disp('error!');

retorno;

fin

cuenta=0;

tempnum=innum;

registro=zeros(1,N) ;

while(N)

count=count+1 ;% de longitud es menor que N

if(count>N)

N=0;

% retorno;

fin

tempnum=tempnum*2;% convierte decimal a binario, multiplica por 2 y redondea hacia arriba

si tempnum>1

registro(cuenta)=1;

tempnum=tempnum-1

elseif(tempnum==1)

record(count)=1;

N=0;%stop loop

else

record(count)=0;

end

end

y=record;

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

3. Para números no enteros mayores que 1, puede usar el método que los divide en partes enteras y decimales. Método a manejar:

Utilice la función de piso de Matlab para redondear hacia abajo. ingrese el número (establecido en innum) y luego use innum-floor(innum) para obtener la parte decimal. Llame a la función anterior. ¡Puede obtener su expresión binaria!

Nota.

, hay un pequeño problema aquí, es decir, el valor de retorno de la función dec2bin es una matriz de caracteres, por lo que primero debemos convertirla en una matriz doble. ¡Puedes usar double() para realizar una conversión de tipo forzada para obtener el código ASCII! valor, simplemente reste 48 ¡Obtenga la secuencia 0,1 del tipo de matriz doble!

El código del programa es el siguiente:

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

% Convertir un número decimal a un número binario

%La entrada es el número decimal innum y el número de dígitos en la parte decimal N

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

%num es la forma binaria de la salida

%numint es la expresión binaria de la parte entera

%numf es la expresión binaria de la parte decimal

sep= 5;%El separador entre la parte entera y la decimal

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

numint= dec2bin(innum);

numint=double(numint)-48;

numf=zeros(1,N);

num=[numint,sep ,numf];

retorno

fin;

%El caso donde la entrada no es un número entero

nint=floor(innum);% Parte entera

nf=innum-nint;% parte decimal

res_nint=dec2bin(nint);

res_nint=double(res_nint)-48;

p>

res_nf=dectobin(nf,N);

numint=res_nint;

numf=res_nf;

num=[numint,sep, numf];

La función dectobin es el decimal superior al binario función de conversión!

4. Parece estar hecho, ¿verdad? NO, hay otro problema, es decir, los números negativos. En el caso de Y la función de conversión del complemento puede estar en el. formato de 1QN La parte del programa de conversión de complemento es la siguiente:

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

%La representación del complemento de. números binarios

%Los parámetros de entrada son la expresión binaria de la parte entera de numint, la expresión binaria de la parte decimal de numf y el indicador de número negativo

%La salida parámetros La entrada del código de complemento para numo, el código de complemento de la parte entera de numinto, el código de complemento de la parte decimal de numfo

if (flag==0)

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

numinto=numint;

numfo=numf;

else% número negativo, el número entero y las partes decimales se invierten y combinan bit a bit. Agregar uno

l1=length(numint);

l2=length(numf);

num=[numint,numf ];

l=l1+l2;

para i=1:l

si num(i)==1% de negación bit a bit

num( i)=0;

más

num(i)=1;

end

end

% niega y 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;%fin de bucle

else

num(temp_l)=0;

temp_l=temp_l-1;

fin

fin

% l1=longitud(numint);

% para i=1:l1

%

% if numint(i)==1% inversión bit a bit

% numint(i)=0;

% else

% numint (i)=1;

% final

%

% final

%

% l2 = longitud(numf);

% para i=1:l2

%

% si numf(i)==1% negación bit a bit

% numf(i)=0;

% else

% numf(i)=1;

% fin

%

% end

%

% % niega y luego agrega uno

% temp_l1=l1;

p >

% while(temp_l1~=0)

% if numint(temp_l1)==0%El bit más bajo es 0

% numint(temp_l1)=1;

% temp_l1=0;% fin de bucle

% else

% numint(temp_l1)=0;

% temp_l1=temp_l1- 1;

% end

% end

%

% % niega y luego suma uno

% 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

% else

% numf(temp_l2)=0;

% temp_l2=temp_l2-1;

% fin

numinto=num(1:l1);

numfo=num(l1+1:l ) ;

% numinto=numint;

% numfo=numf;

num

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

end

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

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

[num1,numint1,numf1,flag1]=dectobin1(innum,N);

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