matlab基础之——将8位二进制数组合成为十进制数

目标 将 a = [0 0 0 1 0 0 0 0] 二进制数组 变为十进制数值

新建函数 把代码复制黏贴到里面 保存

function [ y ] = bit2hex(x ,dir)
% 8位二进制数转换成 十进制数
% y为hex十进制输出,x为输入的8位二进制数组
% d7 d6 d5 d4 d3 d2 d1 d0
% dir = 1(高位是d0,低位是d7)
%     = 0(高位是d7,低位是d0)   

y = 0;

for i = 1:8
    if( dir == 1)
        y = y + x(i)*2^(i-1) ;
    else 
        y = y + x(i)*2^(8-i);
    end
end
end

保存后为这样的 名字跟函数名字要一样 不要有中文名称

a为需要变换的数组, b为十进制保存 参数dir=1时为 d0d1d2d3d4d5d6d7 ; dir=0时为我们熟悉的顺序d7d6d5d4d3d2d1d0

有时会用到截断头 或者截断尾(符号位)

function [ y ] = bit2hex(x ,dir,HeadOrEnd)
% 8位二进制数转换成 十六进制数
% y为hex十六进制输出,x为输入的8位二进制数组
% d7 d6 d5 d4 d3 d2 d1 d0
% dir = 1(高位是d0,低位是d7)
%     = 0(高位是d7,低位是d0)   

% HeadOrEnd=1 把第一位截断(赋值为0即可)
%          =0 把最后一位截断
y = 0;
if(HeadOrEnd == 1)
    x(1)=0;
else
    x(8)=0;
end

for i = 1:8
    if( dir == 1)
        y = y + x(i)*2^(i-1) ;
    else 
        y = y + x(i)*2^(8-i);
    end
end

if(dir==0 && HeadOrEnd==0) || (dir==1 && HeadOrEnd==1) 
    y=y/2;
end

    

注意这个截高/低位之后 是会右移的(整数除以2就是右移1位)

同理低位在前

猜你喜欢

转载自blog.csdn.net/jwdeng1995/article/details/108930942