0

これは、バイナリが格納されている配列で行う方法です

>> hhh=[1 0 1 0 1 0 0; 0 0 1 0 0 0 0; 1 0 1 0 0 0 0; 0 0 0 1 1 0 1]; find(hhh(:,1)==1)

ans =

     1
     3

そして今、私は2進数でそれを行う方法を理解しようとしています

>> hhhh=[1010100; 0010000; 1010000; 0001101]; find(hhhh(:,1)==1)

ans =

   Empty matrix: 0-by-1

すべてのバイナリを分割して配列に戻すハックが機能する場所 (ismember('101010','1') の後にゼロを追加) ですが、おそらくもっと良い代替手段があると思います。

2 進数で N 番目のビットがアクティブかどうかを確認するには、どのコマンドを使用しますか?

Ps Harder パズル: バイナリと DEC の両方で動作する型に依存しないソリューションはありますか?

4

4 に答える 4

4

文字列入力

文字列入力がある場合は、char等しいかどうかのテストを行うことができます。

find(hhh(:, 1) == '1')

文字列配列 (つまり char行列) の場合、find(行と列) の両方の出力を抽出して、どのアクティブ ビットがどの文字列に対応するかを判断できます。

[r, c] = find(hhh == '1');

数値入力

数値入力の場合、 を使用bitgetしてバイナリ表現を取得できます。そこからは、文字列入力のソリューションと非常によく似ています。

B = bsxfun(@bitget, hhh, size(hhh, 1):-1:1);
[r, c] = find(B);

ゼロ以外の要素を検索するため、明示的findに記述する必要がないことに注意してください。find(B == 1)

複合ソリューション

「より難しいパズル」の解決策が求められているものである場合は、最初に入力のタイプを判断し、それに応じて処理できます。

if ischar(hhh)
    %// Apply solution to string array
    %//...
else if isnumeric(hhh)
    %// Apply solution to numeric input
    %// ...
else
    %// This type is unsupported
    assert('Matrix is of unsupported type')
end
于 2013-10-28T11:39:20.153 に答える
0

これは質問に対する直接の回答ではありませんが、関連しています-コメントでセバスチャンによる良い点です! したがって、バイナリがインデックスであるとします。dec2bin で遊ぶ代わりに、

>> hhh=dec2bin(find(mlf));B=bsxfun(@bitget, hhh, 8:-1:1);find(B)
Error using bsxfun
Non-singleton dimensions of the two input arrays must match each other.

次のようなインデックスに直接対処できます

>> filled = find(mlf); 
filled_and_bit2 = bitget(filled,1); 
filled(logical(filled_and_bit2))

ans =

     1
     7

ここで、最初のアクティブ ビットを持つバイナリを見つけます。

手順

データ

>> mlf=sparse([],[],[],2^31,1);
mlf(1)=7;
mlf(4)=10;
mlf(7)=-1;
>> mlf

mlf =

                      (1,1)                       7
                      (4,1)                      10
                      (7,1)                      -1

>> find(mlf)

ans =

     1
     4
     7

インデックス番号をバイナリとして解釈する

(1,1) -----> 000001

(4,1) -----> 000100

(7,1) -----> 000111

出力 1: 3 番目のビットがアクティブなケースを見つける

4

7

出力: 1 番目のビットがアクティブなケースを見つける

1

7

出力: 2 番目のビットがアクティブなケースを見つける

4
于 2013-10-28T13:29:07.650 に答える