こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2018-07-05 23:31:58

QNo.9515575

困ってます

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

1)エクセルの関数DEC2BINでは2進数10桁までなので対応していません。
VBAでマクロを組む必要があります。(例えばhttps://blog.goo.ne.jp/pc_college/e/e7790dee5c99c232136f0b1f65dfe001

2)一旦、文字列とし2進数表記されれば、別の方が書かれているようにMID関数で特定桁の値を見るか、同様にVBAのマクロで取り出すなどが考えられます。

投稿日時 - 2018-07-06 00:49:42

お礼

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

投稿日時 - 2018-07-10 00:12:35

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(9)

ANo.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)

投稿日時 - 2018-07-08 13:17:27

お礼

回答有難うございます!

投稿日時 - 2018-07-10 00:15:03

ANo.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毎の目印です。

投稿日時 - 2018-07-08 08:29:09

お礼

回答有難うございます。

投稿日時 - 2018-07-10 00:14:39

ANo.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

投稿日時 - 2018-07-07 10:18:43

お礼

回答有難うございます。

投稿日時 - 2018-07-10 00:14:08

ANo.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ずつ変換して連結すれば良いと思います。

投稿日時 - 2018-07-06 09:57:33

お礼

回答有難うございます。

投稿日時 - 2018-07-10 00:13:43

ANo.5

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

投稿日時 - 2018-07-06 03:06:38

お礼

有難うございます!

投稿日時 - 2018-07-10 00:13:18

ANo.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に出ます。

投稿日時 - 2018-07-06 02:11:49

お礼

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

投稿日時 - 2018-07-10 00:11:26

ANo.3

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

投稿日時 - 2018-07-06 01:57:19

お礼

大きい数字が・・・。

投稿日時 - 2018-07-10 00:12:52

ANo.1

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

投稿日時 - 2018-07-05 23:33:54

補足

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

投稿日時 - 2018-07-05 23:55:08

お礼

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

投稿日時 - 2018-07-05 23:55:20