【问题标题】:Matlab: binary numbers when used as booleans don't behave as expected?Matlab:用作布尔值时的二进制数不符合预期?
【发布时间】:2011-06-14 04:48:49
【问题描述】:

我正在尝试在 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 时,我如何让它输出“是”,否则输出“否”?

谢谢!

【问题讨论】:

    标签: matlab binary boolean


    【解决方案1】:

    dec2bin() 将数字转换为 string 表示,因此 x(1) 获得 char,而不是 int。因此,它将是对应于'0''1'(分别为48 或49)的ASCII 值。 logical() 只是测试它的参数是否非零,这在两种情况下都是正确的。

    解决方案就是改用bitget()

    【讨论】:

      【解决方案2】:

      IIRC dec2bin 的输出是一个字符串,而不是一个数字。所以你得到的不是01,而是'0''1'

      试试

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

      改为

      【讨论】:

        【解决方案3】:

        在这种情况下,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
        

        【讨论】:

          猜你喜欢
          • 2014-08-13
          • 1970-01-01
          • 2019-08-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-18
          • 2014-03-30
          相关资源
          最近更新 更多