我正在尝试在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'?
谢谢!
答案 0 :(得分:6)
dec2bin()
将数字转换为字符串表示形式,因此x(1)
获取 char ,而不是 int 。因此,它将是与'0'
或'1'
(分别为48或49)对应的ASCII值。 logical()
只是测试它的参数是否为非零,在两种情况下都是如此。
解决方案只是改为使用bitget()
。
答案 1 :(得分:4)
IIRC dec2bin
的输出是一个字符串,而不是一个数字。因此,您未获得0
或1
,而是'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