• ベストアンサー

大きな二進数のn桁目をとりだす方法

1 エクセルで、40けたの2進数を作れるでしょうか 2 2進数表示したものから、n桁目をとりだすにはどのようにしたらいいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • skydaddy
  • ベストアンサー率51% (388/749)
回答No.2

1)エクセルの関数DEC2BINでは2進数10桁までなので対応していません。 VBAでマクロを組む必要があります。(例えばhttps://blog.goo.ne.jp/pc_college/e/e7790dee5c99c232136f0b1f65dfe001) 2)一旦、文字列とし2進数表記されれば、別の方が書かれているようにMID関数で特定桁の値を見るか、同様にVBAのマクロで取り出すなどが考えられます。

noname#233222
質問者

お礼

マクロの紹介有難うございます

その他の回答 (8)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.9

回答No.8の追加です。 質問の2番目に「n桁目をとりだす」ということなのでnを何処かのセルへ入力して2進数のn桁目(右からの桁位置ですよね)の1文字が0か1かを表示すれば良いでしょうか? A2セルへnの実数を入力する前提でA1の10進数からダイレクトに2進数のn桁目を算出できます。(40桁の進数に変換する必要が無い) =MOD(INT(A$1/2^(A2-1)),2)

noname#233222
質問者

お礼

回答有難うございます!

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.8

回答No.6にタイプミスがありましたので訂正します。 目的の10進数は 549,755,813,888-5 → 549,755,813,885          ↓ 目的の10進数は 549,755,813,888-5 → 549,755,813,883 また、8bit毎に分割して2進数に変換する検証を行いましたので結果を画像で添付します。 A1=2^39-5 B1=IF((48-ROW()*8)>0,MOD(INT(A$1/2^(40-ROW()*8)),256),"") C1=IF(B1="","",DEC2BIN(B1,8)) B1とC1セルを下へ5行目までコピーしました。 A7=C1&C2&C3&C4&C5 D列は8bit毎の目印です。

noname#233222
質問者

お礼

回答有難うございます。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.7

マクロはすでに掲示されているので マクロが扱えない、あるいは、関数で処理したい という条件で考えてみました。 1つの計算式で実現しようとすると、 計算式の長さが現実的な範疇を超えるので 添付画像のような方法はいかがでしょうか? B2に計算したい数を埋めます。 C2=QUOTIENT(B2,2^D2) D2=40 E2=DEC2BIN(C2,8) B3=B2-(C2*(2^D2)) C3=QUOTIENT(B3,2^D3) D3=D2-8 E3=DEC2BIN(C3,8) これを下方向に4行複写 B9=E2&E3&E4&E5&E6&E7

noname#233222
質問者

お礼

回答有難うございます。

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.6

>エクセルで、40けたの2進数を作れるでしょうか >例えば、2^39-5 >の数を、二進数表示したいのですが・・・。 2^39 → 549,755,813,888 暗算で2進数にすると 1000000000000000000000000000000000000000 目的の10進数は 549,755,813,888-5 → 549,755,813,885 2進数の減算をすれば筆算で出来るはずです。 1000000000000000000000000000000000000000 -)                    101 -------------------------------------------------------------------- 111111111111111111111111111111111111011 >2進数表示したものから、n桁目をとりだすにはどのようにしたらいいでしょうか。 上記の論法で筆算した結果から桁位置を数えれば良いと思います。 Excelの関数では10進数を2進数に変換できるのは10進数の511迄です。 ランダムな10進数を2進数に変換するには2のべき乗で除算しながら8bitずつ変換して連結すれば良いと思います。

noname#233222
質問者

お礼

回答有難うございます。

  • SI299792
  • ベストアンサー率47% (780/1631)
回答No.5

特定の1桁だけ欲しいのであれば A1 =2^39-5 B1 5 C1 =INT(A1/2^B1*2)-INT(A1/2^B1)*2 とすれば5桁目を出せます。

noname#233222
質問者

お礼

有難うございます!

  • SI299792
  • ベストアンサー率47% (780/1631)
回答No.4

前の方法を思いつく前に、ユーザー関数を作ったので、載せておきます。 ' Option Explicit ' Function DoubleBin(ByVal Number As Double) As String '   Dim Flag As Integer '   While Number > 0     Flag = Number - Int(Number / 2) * 2     DoubleBin = Mid("01", Flag + 1, 1) & DoubleBin     Number = Int(Number / 2)   Wend End Function 2^39-5の5桁目を取り出したいなら A1 2^39-5 B1 5 C1 =DoubleBin(A1) D1 =MID(C1,LEN(C1)-B1,1) と入れればD1に出ます。

noname#233222
質問者

お礼

ユーザー関数まで作っていただきありがとうございます!

  • SI299792
  • ベストアンサー率47% (780/1631)
回答No.3

関数だけでやる方法を考えました。 AP1 2^39-5 AO1 =INT(AP1/2) AO2 =AP1-AO1*2 B列までコピペ。 2行目に2進数が並びます。 後は数えて下さい。

noname#233222
質問者

お礼

大きい数字が・・・。

  • f272
  • ベストアンサー率46% (8530/18260)
回答No.1

(1) 文字として入力すれば2進数表示の2進数が入力可能です。 (2) 文字として入力していることを前提にすれば,MID関数で取り出せます。

noname#233222
質問者

お礼

早々のコメント有難うございます

noname#233222
質問者

補足

例えば、2^39-5 の数を、二進数表示したいのですが・・・。

関連するQ&A

専門家に質問してみよう