4

私は、Matlab で配列の数字を区切る方法を探していましA = 1024A = [1, 0, 2, 4]

ネットで検索したところ、このコードが見つかりました(タイトルにも投稿されています):

sprintf('%d',A) - '0'  

変換された[1024]-> [1, 0, 2, 4].

- '0'問題は解決しましたが、特にその部分がわかりませんでした。誰かがこれがどのように機能するか説明できますか?

また、MATLAB コマンド ウィンドウでsprintf('%d',A) + '0'(for )と書くと、次のように表示されます。A = [1024]

 97 96 98 100

これは私をさらに困惑させました 誰かこれを説明できますか?

4

2 に答える 2

4

-演算子を使用すると、char 配列から double 配列への自動キャストが利用されます。各文字には ascii 値があること に注意してdouble('0')ください。コマンド ラインに入力する48と、答えが表示されます。double('1024')あなたを与えながら

ans =

   49   48   50   52

sprintf('%d', A)整数を文字列 (つまり、char 配列) に変換するだけです。マイナスは両側を二重にキャストするので、最終的には

double('1024') - double('0')

これは

[49, 48, 50, 52] - [48]

最終的には[1,0,2,4]

ここから、加算がなぜ'0'結果になったのかは明らかです。[97, 96, 98, 100]

于 2013-08-08T08:56:02.000 に答える
2

このコマンドは、整数を数値の文字列表現にsprintf('%d',A)変換します。A=1024'1024'

さらに、matlab の文字列は実際には文字配列であるため、if A = '1024'then A(1) = '1'.

残りの説明は、@Dan が投稿した回答に基づいています。数値演算 ( + - * / mod ^...) が文字配列に適用されると、それらは ASCII コードに従って同等の数値表現に変換され、配列形式は double 型として保持されます。

于 2013-08-08T09:05:13.237 に答える