2011-01-23 7 views
1

私はMatlabのブール値として2進数の成分を使用しようとしています。残念ながら、彼らは私が期待するように行動しません。 、つまり、なぜMatlab:ブール値として使用すると2進数が期待どおりに動作しませんか?

ans = 0 
yes 
ans = 1 
yes 

誰もが知っていて、xは(1)1のときどのように私は「はい」出力にそれを得ることができます。たとえば、次のコードください:

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

をそれを出力それ以外の場合は「いいえ」ですか?

ありがとうございます!

答えて

6

dec2bin()文字列表現に数値を変換し、そのx(1)文字を取得ではありません。したがって、'0'または'1'(それぞれ48または49)に対応するASCII値になります。 logical()は、その引数がゼロでないかどうかを単にテストします。どちらの場合もtrueです。

解決策は単に代わりにbitget()を使用することです。

+0

これは私が探していたものです。ありがとう! – des4maisons

4

IIRC dec2binの出力は数字ではなく文字列です。だから、01を得るのではなく、'0'または'1'

されていない代わりに

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

を試してみてください

+0

ああ、それはかなり良いです、ありがとう! – des4maisons

0

このケースでは、実際にビットセットが@Oli によって指摘されている最も実用的な解決策であるように見えますが、文字列を値の対応する配列に変更する一般的な方法は、

for x = dec2bin(0:1)' 
    x(1) % the leading bit of x 
    if x(1) - '0' 
     disp('yes') 
    else 
     disp('no') 
    end 
end 
関連する問題