Matlab:用作布尔值时的二进制数不符合预期吗?

时间:2011-01-23 22:24:14

标签: matlab binary boolean

我正在尝试在Matlab中使用二进制数的组件作为布尔值。不幸的是,他们没有像我期望的那样行事。以下面的代码为例:

for x = dec2bin(0:1)'
    x(1)  % the leading bit of x
    if logical(x(1))
        disp('yes')
    else
        disp('no')
    end
end

输出:

ans = 0
yes
ans = 1
yes

有人知道为什么会这样,当x(1)为1时我怎么能输出'yes',否则输出'no'?

谢谢!

3 个答案:

答案 0 :(得分:6)

dec2bin()将数字转换为字符串表示形式,因此x(1)获取 char ,而不是 int 。因此,它将是与'0''1'(分别为48或49)对应的ASCII值。 logical()只是测试它的参数是否为非零,在两种情况下都是如此。

解决方案只是改为使用bitget()

答案 1 :(得分:4)

IIRC dec2bin的输出是一个字符串,而不是一个数字。因此,您未获得01,而是'0''1'

尝试

if( strncmp(x(1),'1',1) )

代替

答案 2 :(得分:1)

在这种情况下,bitget确实似乎是@Oli指出的最实用的解决方案 但是,将字符串更改为相应数组值的一般替代方法是将字符值减去零。

for x = dec2bin(0:1)'
    x(1)  % the leading bit of x
    if x(1) - '0' 
        disp('yes')
    else
        disp('no')
    end
end