[Matlab练习笔记]进制转换

目录

一、进制

二、Matlab进制转换的内置函数

N进制转换成十进制

二进制转十进制:bin2dec

八进制转十进制:oct2dec

十六进制转十进制:hex2dec

N进制转十进制:base2dec

十进制转换成N进制

十进制转二进制:dec2bin

十进制转八进制:dec2base

十进制转十六进制:dec2hex

三、进制转换类型(整数)

N进制转换为二进制

十进制转换为二进制

八进制转换为二进制

十六进制转换为二进制

二进制转换为N进制

二进制转换为十进制

二进制转换为八进制

二进制转换为十六进制

N进制转换为M进制

四、进制转换类型(小数)


一、进制

进制是一种计数法,以十进制为例,即逢十进一。在不同的领域会使用不同的进制存储数据,例如在Dicom图像(Digital Imaging and Communications in Medicine)中则是使用十六进制进行编码,而在读取图像数据进行图像处理的时候,将数据从十六进制还原成十进制可能会方便操作。

二、Matlab进制转换的内置函数

MATLAB进制转换内置函数如图,以为例:二进制为,八进制为,十六进制为

2.1 N进制转换成十进制

2.1.1 二进制转十进制:bin2dec

x = bin2dec('11111111')% 在MATLAB中二进制需在数值加上'',或者在数值前加0b表示

x = bin2dec(0b11111111)

输出结果:

2.1.2 八进制转十进制:oct2dec

x = oct2dec([377]) %在MATLAB中使用此函数时需在八进制数值加上[]

输出结果:

2.1.3 十六进制转十进制:hex2dec

x = hex2dec('FF'); % 和二进制一样,十六进制数值需要加'',或者在数值前加0x

x = hex2dec(0xFF);

2.1.4 N进制转十进制:base2dec

% base2dec函数用于其他不常用的进制类型转换成十进制

x = base2dec('FF',16); % 'FF'表示要转换的数值,16表示转换数值的进制类型为十六进制

y = base2dec('1103',6) % 六进制数值1103转换为十进制,结果为255

2.2 十进制转换成N进制

2.2.1 十进制转二进制:dec2bin

x = dec2bin(255) % 十进制的数值不需要加符号进行区别,输出结果为x = '11111111'

2.2.2 十进制转八进制:dec2base

x = dec2base(255,8) % 没有dec2oct这个函数,所以用通用的dec2base,输出结果为x = '377'

2.2.3 十进制转十六进制:dec2hex

x = dec2hex(255) % 输出结果为'FF'

三、进制转换类型(整数)

有时候MATLAB没有我们想要的内置函数,例如没有二进制和八进制相互转换的内置函数,可以通过二进制转换成十进制,再转换成八进制间接实现,也可以自己写函数。同时也能练习编程。

3.1 N进制转换为二进制

3.1.1 十进制转换为二进制

(1)计算方式:除2取余,逆序排列

(2)算法流程图:

(3)代码实现:

function [answer] = D2B(Number) 
% This function is used to convert Decmital to Binary 十进制转换为二进制
    answer = []; % 初始化答案
    while Number >= 1 
        a = rem(Number,2); % 求除2后的余数
        a = int2str(a); % 数值转换为字符串方便计数时倒序操作
        answer = strcat(answer,a); % 把余数对应的字符串连接起来
        if a == '1'
            Number = (Number-1)/2;
        else
            Number = Number/2;
        end
    end
    answer = reverse(answer); % 计数是倒序的,把字符串顺序倒过来,输出答案
end

(4)验证:与实际结果一致

3.1.2 八进制转换为二进制

(1)计算方法:每位数字单独转换成3位二进制,然后组合(2的3次方等于8。与3.2.2对比)

(2)代码实现:

function [answer] = O2B(Number) 
% This function is used to convert Octal to Binary 八进制转换为二进制

    Ans = [];% 初始化答案
    str = num2str(Number); % 将输入的数字转为字符串
    number = length(str); % 通过字符串个数判断输入数字的位数;

    for i = 1:number
        Num = str2double(str(i));
        answer = '000'; % 每个八进制数转换为二进制为3位
        j = 1;
        while Num >= 1 
            a = rem(Num,2); % 求除2后的余数
            a = int2str(a); % 数值转换为字符串方便计数时倒序操作
            answer(j) = a; % 保存a
            if a == '1'
                Num = (Num-1)/2;
            else
                Num = Num/2;
            end
            j = j+1;
        end
        answer = reverse(answer); % 计数是倒序的,把字符串顺序倒过来,输出答案
        Ans = strcat(Ans,answer); % 把各个数字转换成的二进制连接起来
    end
    answer = Ans;
end 

3.1.3 十六进制转换为二进制

(1)计算方法:每位数字/字母单独转换成4位二进制,然后组合(2的4次方等于16。与3.2.3对比)

(2)代码实现:与八进制转换成二进制类似,但是由于十六进制包含字母,需要先将字母转换成对应的数字

function [answer] = H2B(Number) 
% This function is used to convert Octal to Binary 十六进制转换为二进制
% 输入变量Number必须为字符串

    Ans = [];% 初始化答案
    number = length(Number); % 通过字符串个数判断输入数字的位数;
%--------------------------------处理数据----------------------------------
    for i = 1:number
        if isstrprop(Number(i),'digit') == 1 % 判断单前字符是否为数字
            Num = str2double(Number(i));
        elseif Number(i) == 'A' % A代表十进制的10
            Num = 10;
        elseif Number(i) == 'B' % B代表十进制的11
            Num = 11;
        elseif Number(i) == 'C' % C代表十进制的12
            Num = 12;
        elseif Number(i) == 'D' % D代表十进制的13
            Num = 13;
        elseif Number(i) == 'E' % E代表十进制的14
            Num = 14;
        elseif Number(i) == 'F' % F代表十进制的15
            Num = 15;
        end
%-------------------------------计算---------------------------------------
        answer = '0000'; % 每个十六进制数转换为二进制为4位
        j = 1;
        while Num >= 1 
            a = rem(Num,2); % 求除2后的余数
            a = int2str(a); % 数值转换为字符串方便计数时倒序操作
            answer(j) = a; % 保存a
            if a == '1'
                Num = (Num-1)/2;
            else
                Num = Num/2;
            end
            j = j+1;
        end
        answer = reverse(answer); % 计数是倒序的,把字符串顺序倒过来,输出答案
        Ans = strcat(Ans,answer); % 把各个数字转换成的二进制连接起来
    end
    answer = Ans;
end 

3.2 二进制转换为N进制

3.2.1 二进制转换为十进制

(1)计算方式:N = \sum_{i=1}^{n} M*2^{i},其中n表示二进制位数,M = 0或者1

(2)代码实现:

function [answer] = B2D(Number) 
% This function is used to convert Binary to Decital 二进制转换为十进制

    str = num2str(Number); % 将输入的数字转为字符串
    str = reverse(str); % 从2的0次方开始计算,所以是倒序
    number = length(str); % 通过字符串个数判断输入数字的位数;
    answer = 0;
    
    for i = 1:number
        M = str2double(str(i)); % 将提取字符串单个数并转换为double类型,M为0或1
        answer = M*2^(i-1)+answer; % 累加
    end

end 

3.2.2 二进制转换为八进制

(1)计算方法:每3位二进制转换为八进制,然后组合(2的3次方等于8。与3.1.2对比)

(2)代码实现:

function [Answer] = B2O(Number) 
% This function is used to convert Binary to Octal 二进制转换为十进制
% 逆序每三位分为一组,通过二进制转换为十进制的方式计算每一组,再组合
%--------------------------------分组-------------------------------------
    str = num2str(Number); % 将输入的数字转为字符串
    str = reverse(str); % 从2的0次方开始计算,所以是倒序
    number = length(str); % 通过字符串个数判断输入数字的位数;
    a = rem(number,3); % 求除3后的余数
    group_num = (number-a)/3; % 计算组数
    store_ans = [];
    
%--------------------------------补0-------------------------------------
    % 如果余数不等于0,则是首组不满三位,补0
    if a ~= 0
        if a == 1
            str(end+1) = '0';
        else
            str(end+1:end+2) = '00';
        end
        group_num = group_num+1; % 补0后组数加1;
    end
%--------------------------------计算-------------------------------------
    % 其他组都是三位,不需要特殊处理,所以用循环就行
    for k = 1:group_num
        group = str(k*3-2:k*3);
        answer = 0;
        for i = 1:3
            M = str2double(group(i)); % 将提取字符串单个数并转换为double类型,M为0或1
            answer = M*2^(i-1)+answer; % 累加
        end
        answer = num2str(answer); % 把结果先转换成字符串,方便组合
        store_ans = strcat(store_ans,answer);
    end
    store_ans = reverse(store_ans); % 把后面的组逆序转为顺序组合
    Answer = str2double(store_ans); % 把结果转换为数字类型
end 

3.2.3 二进制转换为十六进制

(1)计算方法:每4位二进制转换为八进制,然后组合(2的4次方等于16。与3.1.3对比)

(2)代码实现:与二进制转换为八进制思路相似,逆序将4位分为1组,首组不足4位则补0;将计算结果10-15对应A-F,结果用字符串输出。

3.2.4 N进制转换为M进制

通过间接转换实现,现将N进制转换为二进制,再转换为M进制;或者先将N进制转换为十进制,再将十进制转换为M进制。

四、进制转换类型(小数)

整数的进制转换可用MATLAB内置函数快速实现,而自己写函数可以加深对进制转换计算方法的理解。有时候MATLAB没有能够实现我们想要的功能的函数,这就需要自己实现,在平时多锻炼自己的编程思维。另,小数的转换我没有找到相关的内置函数,欢迎补充~

实现小数进制转换待续......

  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值