- ベストアンサー
大きな二進数のn桁目をとりだす方法
1 エクセルで、40けたの2進数を作れるでしょうか 2 2進数表示したものから、n桁目をとりだすにはどのようにしたらいいでしょうか。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
1)エクセルの関数DEC2BINでは2進数10桁までなので対応していません。 VBAでマクロを組む必要があります。(例えばhttps://blog.goo.ne.jp/pc_college/e/e7790dee5c99c232136f0b1f65dfe001) 2)一旦、文字列とし2進数表記されれば、別の方が書かれているようにMID関数で特定桁の値を見るか、同様にVBAのマクロで取り出すなどが考えられます。
その他の回答 (8)
- bunjii
- ベストアンサー率43% (3589/8249)
回答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)
お礼
回答有難うございます!
- bunjii
- ベストアンサー率43% (3589/8249)
回答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毎の目印です。
お礼
回答有難うございます。
- HohoPapa
- ベストアンサー率65% (455/693)
- bunjii
- ベストアンサー率43% (3589/8249)
>エクセルで、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ずつ変換して連結すれば良いと思います。
お礼
回答有難うございます。
- SI299792
- ベストアンサー率47% (780/1631)
特定の1桁だけ欲しいのであれば A1 =2^39-5 B1 5 C1 =INT(A1/2^B1*2)-INT(A1/2^B1)*2 とすれば5桁目を出せます。
お礼
有難うございます!
- SI299792
- ベストアンサー率47% (780/1631)
前の方法を思いつく前に、ユーザー関数を作ったので、載せておきます。 ' 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に出ます。
お礼
ユーザー関数まで作っていただきありがとうございます!
- SI299792
- ベストアンサー率47% (780/1631)
関数だけでやる方法を考えました。 AP1 2^39-5 AO1 =INT(AP1/2) AO2 =AP1-AO1*2 B列までコピペ。 2行目に2進数が並びます。 後は数えて下さい。
お礼
大きい数字が・・・。
- f272
- ベストアンサー率46% (8530/18260)
(1) 文字として入力すれば2進数表示の2進数が入力可能です。 (2) 文字として入力していることを前提にすれば,MID関数で取り出せます。
お礼
早々のコメント有難うございます
補足
例えば、2^39-5 の数を、二進数表示したいのですが・・・。
お礼
マクロの紹介有難うございます