Matlab: двоичные числа при использовании в качестве логических значений не ведут себя должным образом? - PullRequest
1 голос
/ 24 января 2011

Я пытаюсь использовать компоненты двоичных чисел как логические значения в 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

Кто-нибудь знает, почему это так, и как я могу получить его для вывода «да», когда х (1) равен 1, а «нет» в противном случае?

Спасибо!

Ответы [ 3 ]

6 голосов
/ 24 января 2011

dec2bin() преобразовывает число в представление string , поэтому x(1) получает char , а не int Следовательно, это будет значение ASCII, соответствующее '0' или '1' (48 или 49 соответственно). logical() просто проверяет, является ли его аргумент ненулевым, что верно в обоих случаях.

Решение состоит в том, чтобы просто использовать bitget() вместо.

4 голосов
/ 24 января 2011

IIRC вывод dec2bin является строкой, а не числом.Таким образом, вы не получаете 0 или 1, а '0' или '1'

Попробуйте

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

вместо

1 голос
/ 07 января 2013

В этом случае 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
...