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 p>
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
% p >
% 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)