複数の10進数の値を​ndec2binで2​進数に変換したいです​。

3 次查看(过去 30 天)
Yuya Oki
Yuya Oki 2021-8-24
评论: Yuya Oki 2021-8-25
複数の10進数の値をndec2binで2進数に変換したいです。
ex)a = [1 2 3]'
ndec2bin(a,3);
上のコードを試したのですがPlease specify x in the range[-2^(n-1) 2^(n-1)-1].というエラーがでてうまくできませんでした。ndec2binの関数の数値xには変数をいれられないということなのでしょうか?

采纳的回答

Shunichi Kusano
Shunichi Kusano 2021-8-24
dec2binでいけるみたいです。
a = [1 2 3]';
dec2bin(a,3)
ans = 3×3 char array
'001' '010' '011'
  4 个评论
Atsushi Ueno
Atsushi Ueno 2021-8-24
横やり失礼致します。興味を持って拝見させて頂きました。コメントさせていただきます。
【結論】
関数 dec2bin および dec2hexが負の数値の変換に対応したのはR2020aでした。リリース ノート
こちらのnbec2binは、R2019b以前のdec2binでは出来ない「負の数値の変換」をカバーしていますが、同時にdec2binの持つ「配列の変換」を無効にしてしまっているので、それをカバーしたのが@Shunichi Kusanoさんのnbec2bin_arrayです。
【詳細】
a = [1 2 3]';
ndec2bin(a,3);
>上のコードを試したのですがPlease specify x in the range[-2^(n-1) 2^(n-1)-1].というエラーがでてうまくできませんでした。→上記エラーは再現しませんでした。下に当該エラーを出すコードを抜粋します。
function [binstring]=ndec2bin(x,n)
if x>2^(n-1)-1 || x<-2^(n-1)
error('Please specify x in the range[-2^(n-1) 2^(n-1)-1].')
end % これより先は省略
上記判定は即ち「n-1桁の2進数※で表現できる範囲外の値」なら"Please specify..."とエラーを表示する意味ですが、a = [1 2 3]は正負共に2桁で表現できる範囲に入っていますから当該エラーは出ないはずです。(※なぜ範囲チェックの仕様が「n-1桁…」なのかは謎です。本来は「n桁…」にすべきだと思います。)
当該エラーよりも、配列を入力したために下記のエラーが出るはずです。このエラーは@Shunichi Kusanoさんの説明の通りで、ndec2bin_arrayなら同エラーは出ません。
|| && の演算のオペランドは、論理スカラー値に変換可能でなければなりません。
エラー: ndec2bin (line 7)
if x>2^(n-1)-1 || x<-2^(n-1)
>ndec2binの関数の数値xには変数をいれられないということなのでしょうか?
変数はいれられます。いれられないのは配列です。
Yuya Oki
Yuya Oki 2021-8-25
Shunichi Kusano様、Atsushi Ueno様
ご回答、ご教授いただきありがとうございました。添付していただいたndec2bin_arrayの関数で解決できました。

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

标签

产品


版本

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!