2進数を10進数に変換するBIN2DEC()関数の上限
使用する関数:BIN2DEC、IF、LEN、MID
・関数 | BIN2DEC(binary to decimal) |
・書式 | =BIN2DEC(2進数) |
・内容 | BIN2DEC 関数を使用して2進数を10進数に変換します。 |
使用例
=BIN2DEC(11111)
=31
=BIN2DEC(10101)
=21
2進数を10進数に変換するBIN2DEC()関数は上限がります
=BIN2DEC(111111111)(←1が9個
=511
たった??
はい。
111111111+1=1000000000(←10桁になってしまう
10進数の「511」が限界です
なぜ9桁なのか?
どうせならエクセルで表示できる15桁まで対応してほしい
そうだ!足りない分は作ろう
セルH2)に「111111111111111」2進数を入れます
111111111111111と入力すると1.11111E+14となります
111111111111111と表示させるには
セルの書式設定を数式にしておく必要があります
まずは文字数を取得
=LEN(H2)
9文字以下をBIN2DEC関数を使う
=IF(LEN(H2)<10,BIN2DEC(H2),BIN2DEC(MID(H2,LEN(H2)-8,9)))
=MID(H2,LEN(H2)-8,9)
10文字目が1の場合512を足す
=IF(LEN(H2)>9,IF(MID(H2,LEN(H2)-9,1)="1","512","0"),"0")
11文字目が1の場合1024を足す
=IF(LEN(H2)>10,IF(MID(H2,LEN(H2)-10,1)="1","1024","0"),"0")
12文字目が1の場合2048を足す
=IF(LEN(H2)>11,IF(MID(H2,LEN(H2)-11,1)="1","2048","0"),"0")
13文字目が1の場合4096を足す
=IF(LEN(H2)>12,IF(MID(H2,LEN(H2)-12,1)="1","4096","0"),"0")
14文字目が1の場合8192を足す
=IF(LEN(H2)>13,IF(MID(H2,LEN(H2)-13,1)="1","8192","0"),"0")
15文字目が1の場合16384を足す
=IF(LEN(H2)>14,IF(MID(H2,LEN(H2)-14,1)="1","16384","0"),"0")
15文字以上はエクセルでは丸められてしまうので無駄
512から倍々と増える数値はPOWER関数が使えますが文字数が増えます
=POWER(2,9) 512
=POWER(2,10) 1024
=POWER(2,11) 2048
=POWER(2,13) 4096
=POWER(2,14) 8192
=POWER(2,15) 16384
上記の式を全部足します
390文字あります(なげぇよ)
2進数15桁まで計算可能です
2 進数 111111111111111(←1が15個
10進数 32767 まで対応
気が向いたら
10進数→2進数(DEC2BIN関数)もチャレンジしてみたいと思います
追記:チャレンジしてみました→
DEC2BIN()関数の上限
以上 2進数を10進数に変換するBIN2DEC()関数の上限でした
ここから下は暇つぶし程度にご覧ください
おまけ
実は上記の方法は2進数を2進数として扱っていないので
数値として扱える15桁を超えても
32ビットの限界である
11111111111111111111111111111111(←1が32個)
を超えても計算できます
セルH2は数値として表示するのは無理なので
セルの書式設定で「文字列」にしておく必要があります
全部1ならばREPT関数を使うことができます
例)=REPT(1,32) ←1を32回繰り返し
結果:11111111111111111111111111111111
結果は文字列として表示されます
10進数が15桁まではできることになります
10進数が15桁になるのは49桁目562949953421311になります
上記から16桁以上を取得します
16文字目
=IF(LEN(H2)>15,IF(MID(H2,LEN(H2)-15,1)="1","32768","0"),"0")
17文字目
=IF(LEN(H2)>16,IF(MID(H2,LEN(H2)-16,1)="1","65536","0"),"0")
18文字目
=IF(LEN(H2)>17,IF(MID(H2,LEN(H2)-17,1)="1","131072","0"),"0")
19文字目
=IF(LEN(H2)>18,IF(MID(H2,LEN(H2)-18,1)="1","262144","0"),"0")
20文字目
=IF(LEN(H2)>19,IF(MID(H2,LEN(H2)-19,1)="1","524288","0"),"0")
21文字目
=IF(LEN(H2)>20,IF(MID(H2,LEN(H2)-20,1)="1","1048576","0"),"0")
22文字目
=IF(LEN(H2)>21,IF(MID(H2,LEN(H2)-21,1)="1","2097152","0"),"0")
23文字目
=IF(LEN(H2)>22,IF(MID(H2,LEN(H2)-22,1)="1","4194304","0"),"0")
24文字目
=IF(LEN(H2)>23,IF(MID(H2,LEN(H2)-23,1)="1","8388608","0"),"0")
25文字目
=IF(LEN(H2)>24,IF(MID(H2,LEN(H2)-24,1)="1","16777216","0"),"0")
26文字目
=IF(LEN(H2)>25,IF(MID(H2,LEN(H2)-25,1)="1","33554432","0"),"0")
27文字目
=IF(LEN(H2)>26,IF(MID(H2,LEN(H2)-26,1)="1","67108864","0"),"0")
28文字目
=IF(LEN(H2)>27,IF(MID(H2,LEN(H2)-27,1)="1","134217728","0"),"0")
29文字目
=IF(LEN(H2)>28,IF(MID(H2,LEN(H2)-28,1)="1","268435456","0"),"0")
30文字目
=IF(LEN(H2)>29,IF(MID(H2,LEN(H2)-29,1)="1","536870912","0"),"0")
倍々と増える数値が次は「"1073741824"」になります
「"1073741824"」←12文字を超えるので文字数を少なくするため
「POWER(2,30)」←11文字のPOWER関数を使います
31文字目
=IF(LEN(H2)>30,IF(MID(H2,LEN(H2)-30,1)="1",POWER(2,30),"0"),"0")
32文字目
=IF(LEN(H2)>31,IF(MID(H2,LEN(H2)-31,1)="1",POWER(2,31),"0"),"0")
33文字目
=IF(LEN(H2)>32,IF(MID(H2,LEN(H2)-32,1)="1",POWER(2,32),"0"),"0")
34文字目
=IF(LEN(H2)>33,IF(MID(H2,LEN(H2)-33,1)="1",POWER(2,33),"0"),"0")
35文字目
=IF(LEN(H2)>34,IF(MID(H2,LEN(H2)-34,1)="1",POWER(2,34),"0"),"0")
36文字目
=IF(LEN(H2)>35,IF(MID(H2,LEN(H2)-35,1)="1",POWER(2,35),"0"),"0")
37文字目
=IF(LEN(H2)>36,IF(MID(H2,LEN(H2)-36,1)="1",POWER(2,36),"0"),"0")
38文字目
=IF(LEN(H2)>37,IF(MID(H2,LEN(H2)-37,1)="1",POWER(2,37),"0"),"0")
39文字目
=IF(LEN(H2)>38,IF(MID(H2,LEN(H2)-38,1)="1",POWER(2,38),"0"),"0")
40文字目
=IF(LEN(H2)>39,IF(MID(H2,LEN(H2)-39,1)="1",POWER(2,39),"0"),"0")
41文字目
=IF(LEN(H2)>40,IF(MID(H2,LEN(H2)-40,1)="1",POWER(2,40),"0"),"0")
42文字目
=IF(LEN(H2)>41,IF(MID(H2,LEN(H2)-41,1)="1",POWER(2,41),"0"),"0")
43文字目
=IF(LEN(H2)>42,IF(MID(H2,LEN(H2)-42,1)="1",POWER(2,42),"0"),"0")
44文字目
=IF(LEN(H2)>43,IF(MID(H2,LEN(H2)-43,1)="1",POWER(2,43),"0"),"0")
45文字目
=IF(LEN(H2)>44,IF(MID(H2,LEN(H2)-44,1)="1",POWER(2,44),"0"),"0")
46文字目
=IF(LEN(H2)>45,IF(MID(H2,LEN(H2)-45,1)="1",POWER(2,45),"0"),"0")
47文字目
=IF(LEN(H2)>46,IF(MID(H2,LEN(H2)-46,1)="1",POWER(2,46),"0"),"0")
48文字目
=IF(LEN(H2)>47,IF(MID(H2,LEN(H2)-47,1)="1",POWER(2,47),"0"),"0")
49文字目
=IF(LEN(H2)>48,IF(MID(H2,LEN(H2)-48,1)="1",POWER(2,48),"0"),"0")
50文字目
=IF(LEN(H2)>49,IF(MID(H2,LEN(H2)-49,1)="1",POWER(2,49),"0"),"0")
全部足します
2620文字です(・・・・・・・)
ちなみにエクセルでは1セルの中に32767文字入れられますが
セルに表示されるのは1024文字までで
それ以上は数式バーでしか確認できません
すべて1の場合2進数49桁で
1111111111111111111111111111111111111111111111111
10進数は
562949953421311
になります
2進数を10進数に変換するのであれば49桁が上限です
10進数にまだ余裕があります
10進数15桁の限界
999999999999999 までで
2進数は50桁
11100011010111111010100100110001100111111111111111
になります
上記を実行して999999999999999を超えてもエラーにはなりません
15桁以上は最後の数字が丸められるので0になります
正しい数字ではなくなるのでエクセルでは
10進数の15桁
999999999999999(999兆9999億9999万9999)
2進数50桁
11100011010111111010100100110001100111111111111111
が限界です
以上 2進数を10進数に変換する 暇人でした
2進数を10進数にするのは999999999999999は無理でした
→
DEC2BIN()関数の上限
他のN進数変換は
BIN2DEC 2進数(BIN)から10進数(DEC)
BIN2HEX 2進数(BIN)から16進数(HEX)
DEC2BIN 10進数(DEC)から2進数(BIN)
DEC2OCT 10進数(DEC)から 8進数(OCT)
2進数(BIN)8進数(OCT)10進数(DEC)16進数(HEX)として
おそらく
BIN to OCT で BIN2DEC 2進数から8進数だと思われます
2進数(BIN)はバイナリ (binary) の bin
8進数(OCT)はオクタル (octal) の oct
10進数(DEC)はデシマル (decimal) の dec
16進数(HEX)はヘキサデシマル (hexadecimal) の hex
16進数(HEX)を10進数(DEC)にしたい場合
HEX to DEC なので関数は HEX2DECになります
=HEX2DEC(100) =256
=HEX2DEC("FF") =256
※16進数がアルファベットの場合「"」ではさみます