- ベストアンサー
大きな二進数のn桁目をとりだす方法
1 エクセルで、40けたの2進数を作れるでしょうか 2 2進数表示したものから、n桁目をとりだすにはどのようにしたらいいでしょうか。
- Excel(エクセル)
- 回答数9
- ありがとう数14
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
1)エクセルの関数DEC2BINでは2進数10桁までなので対応していません。 VBAでマクロを組む必要があります。(例えばhttps://blog.goo.ne.jp/pc_college/e/e7790dee5c99c232136f0b1f65dfe001) 2)一旦、文字列とし2進数表記されれば、別の方が書かれているようにMID関数で特定桁の値を見るか、同様にVBAのマクロで取り出すなどが考えられます。
その他の回答 (8)
- bunjii
- ベストアンサー率43% (3589/8248)
回答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/8248)
回答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% (454/690)
マクロはすでに掲示されているので マクロが扱えない、あるいは、関数で処理したい という条件で考えてみました。 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
お礼
回答有難うございます。
- bunjii
- ベストアンサー率43% (3589/8248)
>エクセルで、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
- ベストアンサー率48% (709/1465)
特定の1桁だけ欲しいのであれば A1 =2^39-5 B1 5 C1 =INT(A1/2^B1*2)-INT(A1/2^B1)*2 とすれば5桁目を出せます。
お礼
有難うございます!
- SI299792
- ベストアンサー率48% (709/1465)
前の方法を思いつく前に、ユーザー関数を作ったので、載せておきます。 ' 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
- ベストアンサー率48% (709/1465)
関数だけでやる方法を考えました。 AP1 2^39-5 AO1 =INT(AP1/2) AO2 =AP1-AO1*2 B列までコピペ。 2行目に2進数が並びます。 後は数えて下さい。
お礼
大きい数字が・・・。
- f272
- ベストアンサー率46% (7995/17085)
(1) 文字として入力すれば2進数表示の2進数が入力可能です。 (2) 文字として入力していることを前提にすれば,MID関数で取り出せます。
お礼
早々のコメント有難うございます
補足
例えば、2^39-5 の数を、二進数表示したいのですが・・・。
関連するQ&A
- 16進数n桁を10進数で表すときに必要な桁数
16進数n桁を10進数で表すとき何桁必要なのかを調べていたのですが 例:FF(16進2桁)→255(10進3桁) 計算式はlog10(16^n)桁(端数繰り上げ)になると思います。 ところで16進n桁に対して10進は2*n桁あれば十分なのかどうかを知りたいのです。 つまり16進数100桁に対して10進数200桁あれば十分ですが nが大きい数字でも成立するのかどうか。 log10(16^n) < 2 * n になるのかな?? 当方数学的な知識が乏しいものでそうなるのかどうかわかりません。 是非ご教授頂けないでしょうか。宜しくお願い致します。
- ベストアンサー
- 数学・算数
- VBAで4桁の16進数から16桁の2進数変換
VBAで4桁の16進数(FFFFとか)を2進数(1111 1111 1111 1111とか)に変換して変換した2進数を1桁づつセルに表示させるには、どうしたらいいでしょうか?ワークシート上だと8桁までしか対応してないようで、左右8桁づつわけてHEX2BINを使ってとりあえず変換する事は、できましたがVBAでマクロを組んで行いたいです。例えばA1に16進数を入れA2~P2に2進数を1桁づつ表示させたいです。よろしくお願いします。
- 締切済み
- Visual Basic
- ナンバーズ4の各桁の合計数がNのときの組み合わせの数
ナンバーズ4についての質問です。 ナンバーズ4の各桁を合計した値をNとします(0≦N≦36、Nは自然数) ⇒ナンバーズ4は0000~9999の中から数字を選択するため 各桁の合計値がNのときにナンバーズ4の組み合わせは 何パターンあるのか求める方法を教えてください。 例)N=0のときは0000の1パターン N=1のときは0001 0010 0100 1000の4パターン これを上記のようなアナログなやり方ではなく 数式で求めたいのです。 よろしくお願いいたします。
- ベストアンサー
- 数学・算数
- 2桁の自然数はいくつあるか
■6で割ると5余り、8で割ると7余るような2桁の自然数はいくつあるか。■という問題について悩んでいます。 解説によると、 6で割ると5余る数は6a+5、8で割ると7余る数は8b+7で表される(a,bは自然数)。 この2つの条件を満たす2桁の自然数Nは、 N=6a+5=8b+7≦99…(1) (1)の辺々に1を加えると、 N+1=6a+6=8b+8 =6(a+1)=8(b+a)≦100 よって、N+1は、6と8の最小公倍数24の倍数である。 100以下の自然数で、24の倍数であるのは、24、48、72、96であるから、Nは23、47、71、95の4個である。 とのことなのですが、何故(1)の辺々に1を加えたのかが分かりません。 どなたかご教授お願いします。
- ベストアンサー
- 数学・算数
- 2進数1101.011に2進数の桁の重みをかけると
2進数1101.011に2進数の桁の重みをかけるとなぜ10進数になるんでしょうか? それはそういう結果になるからだ、というのはわかっているんですが、私が知りたいのは 2進数1101.011 に10進数の桁の重みをかけたら、10進数に変換される 2進数1101.011 に8進数の桁の重みをかけたら、8進数に変換される 2進数1101.011 に16進数の桁の重みをかけたら、16進数に変換される というのなら納得できるんですが 2進数1101.011 に2進数の桁の重みをかけたら 10進数 というのが納得できません。なぜ、8進数、16進数、3,4,5,6,7,ではなく10進数になるんでしょうか?2進数の桁の重みなのに。
- ベストアンサー
- その他(プログラミング・開発)
- Excelで「10桁の自然数×10桁の自然数」を計算する方法
Excelで「10桁の自然数×10桁の自然数」を関数を組み合わせるか、VBAで組むかして、計算する方法をお分かりになる方おられませんでしょうか?(計算結果は文字列として得られることになると思いますが、それでかまいません。) こうすればできる、というアイデアだけでもかまいませんので、よろしくお願いいたします。
- 締切済み
- オフィス系ソフト
- 10^n から1を引いた数は9で割り切れることについて
下記の過去質問における、私自身の回答(#4と#5)に関連した質問です。 http://oshiete1.goo.ne.jp/qa2100301.html たとえば、 10進法であれば、 「頭の桁が1で、その下がゼロばっかりの数」から1を引いた数は9で割り切れ、 16進法であれば、 「頭の桁が1で、その下がゼロばっかりの数」から1を引いた数はFで割り切れる、 ということについてです。 上記リンク中の自分の回答の文章で、 「ところが、10^n から1を引くと、必ず9だけが並んだ自然数(ただし、n=ゼロのときだけはゼロ)になります。これは、必ず9で割り切れます。」 という部分についてなのですが、 なんか、ちゃんとした証明の文章になっていないです。 このことをエレガントに、できるだけ簡潔に、証明する方法はないものでしょうか。
- ベストアンサー
- 数学・算数
- 10進数を16桁2進数になおす問題について
10進数の0.3を16桁2進数表現であらわすと 0.0100110011001100 でいいのでしょうか? また10進数の0.1を2進数16桁であらわし,17桁目で0捨1入せよ.という 問題があるのですが 17桁まで表すと 0.00011001100110011 で0捨1入すると 0.0001100110011010 でいいのでしょうか? これを10回加えると1よりは大きくなるのでしょうか? それとも小さくなるのでしょうか? どなたか教えてください。
- ベストアンサー
- その他([技術者向] コンピューター)
- 10進数から8けたの2進数に変換
10進数から2進数への変換はわかるのですが 10進数から8桁の2進数への変換がわかりません。 仮に10進数の38を8桁の2進数に直す場合、どんな過程を経て、8桁の2進数になるのでしょうか。 どなたか教えていただけますと有難いです。 宜しくおねがいします。
- 締切済み
- その他([技術者向] コンピューター)
お礼
マクロの紹介有難うございます