はじめての親子ハイキングに挑戦!! >>

Excelで16進数を(2の補数などで)負の数の10進数に変換するやり方を
教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

>それでは、負の数にはならないんじゃないですか?


HEX2DECで扱う幅より小さい場合は、
便宜的に以下のようにすればいいかと思います。
=IF(HEX2DEC(A1)<16^LEN(A1)/2,HEX2DEC(A1),HEX2DEC(A1)-16^LEN(A1))
    • good
    • 5

意味理解してなかったです。

すみません。

=IF(MOD(DEC2BIN(POWER(2,LEN(IF(A2="","",HEX2BIN(A2))))-1)-IF(A2="","",HEX2BIN(A2)),2)=0,F2+1,DEC2BIN(BIN2DEC(DEC2BIN(POWER(2,LEN(IF(A2="","",HEX2BIN(A2))))-1)-IF(A2="","",HEX2BIN(A2)))+1))

これ2進数での結果です。あとは10進数に変換すればいいとおもいますよ。
    • good
    • 1

>それでは、負の数にはならないんじゃないですか?


なります。
試しにやってみてください。

以下は,右の列の各セルに =hex2dec(左隣のセル) と入れてみた結果です。

7fffffffff549755813887
8000000000-549755813888
FFFFFFFFFF-1

どうやら,40ビットで計算しているようです。
    • good
    • 1

こんにちは。



HEX2DEC関数です。エンジニア分類です。

HEX2DEC(数値)です。

エンジニア分類がアドインされてなかったら手動で※アドインしてください。

※ツール⇒アドイン⇒分析ツール[チェック]⇒OKです。(なおofficeCD-ROMが必要になる場合があります。)

この回答への補足

それでは、負の数にはならないんじゃないですか?

補足日時:2005/11/16 01:15
    • good
    • 2

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル DEC2BIN 範囲外数値の演算

エクセルの2進数変換関数の「DEC2BIN」について、

-32768から32767の範囲の数値を符号付の16bitへ変換したく、
調べたところDEC2BIN関数にたどり着いたのですが、
-512から511の範囲外では、使用できず、エラーが返ってきます。

何か良い解決策は、ないでしょうか?
初めての質問となりますが、よろしくお願いいたします。

Aベストアンサー

#3,4です。

=RIGHT("0000000000000000"&DEC2BIN(INT(A1/256),8)&DEC2BIN(MOD(A1,256),8),16)

でどうでしよう。

Qエクセル2010で2進数の計算をするには

エクセル2010を使って2進数の乗算と加算を複数回行い、最後にそれぞれの答えをすべて加算したいのですが、こういうことは可能でしょうか。
また、最後の答えをすべて加算したときの桁数は100桁程度になると思います。
(できれば10進数をキーボードから入力すれば2進数の変換から複数回の乗算と加算などを自動で計算できれば大変ありがたいのですが)

書店で参考書を探したのですが、10進数→2進数、2進数→10進数の変換については載っているのですが、2進数の計算についてはどの本にも記述がありませんでした。

どうぞよろしくお願いします。

Aベストアンサー

2 進数では、乗法や除法も定義されます。0 x 0 = 0、0 x 1 = 0、1 x 0 = 0、1 x 1 = 1 となります。これを使うと、当たり前かもしれませんが、筆算もできます。例えば次のとおりです。

  1 0 1   =      1 x 2^2 + 0 x 2^1 + 1 x 2^0 = 5
x   1 1   =           1 x 2^1 + 1 x 2^0 = 3
―――――
  1 0 1
 1 0 1
―――――
 1 1 1 1   = 1 x 2^3 + 1 x 2^2 + 1 x 2^1 + 1 x 2^0 = 15


「整数である 2 進数」同士の計算そのものは、例えば =BIN2DEC(10)*BIN2DEC(110) といった具合にできるからいいのですが、質問文を読むと、桁数があまりにも多すぎなことが問題だと思います。

2^(100-1) = (2^100)/2
     = {(2^10)^10}/2
     = (1024^10)/2
     > (1000^10)/2
     = {(10^3)^10}/2
     = (10^30)/2
     = 5 x 10^29

となり、たとえ 10 進数で表示しても、0 が 29 個も並んだ数よりも更に大きいことになるわけだから、天文学的どころでは済まない、途方もない数だと分かります。せめて対数を取るくらいの工夫は必要でしょう。Excel の対数としては、LOG、LOG10、LN 関数が使えます。log x + log y = log xy というふうに、和から積を作れるのでしたね。

また、Excel の仕様では、誤差なく計算できる最大の桁数は 15 桁です。特に対数を取らない場合は、その点にも注意が必要です。


それから、BIN2DEC 関数は、符号を含めて 10 ビットまでの整数にしか対応できないことにも注意してください。つまり数字の部分は 9 ビットなので、-512 以上 511 以下の整数です。

小数も扱うには、(1)元の数を何倍かして小数点以下をなくす(整数化する)方法とか、(2)ユーザー定義関数その他の方法により 2 進の小数を 10 進の小数に直し、計算後に 10 から 2 に戻す方法などが考えられます。何倍かすると言っている意味は、10 進数を 10 倍すると小数点が右に一つ移動するのと同様に、2 進数では倍にすると小数点が動くという性質を使うということです。

次のページを参考にしてください。

2 進小数の求め方 http://oshiete.goo.ne.jp/qa/6756230.html
2 進小数の加法  http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1486952069

2 進数では、乗法や除法も定義されます。0 x 0 = 0、0 x 1 = 0、1 x 0 = 0、1 x 1 = 1 となります。これを使うと、当たり前かもしれませんが、筆算もできます。例えば次のとおりです。

  1 0 1   =      1 x 2^2 + 0 x 2^1 + 1 x 2^0 = 5
x   1 1   =           1 x 2^1 + 1 x 2^0 = 3
―――――
  1 0 1
 1 0 1
―――――
 1 1 1 1   = 1 x 2^3 + 1 x 2^2 + 1 x 2^1 + 1 x 2^0 = 15


「整数である 2 進数」同士の計算そのものは、例えば =BIN2DEC(10)*BIN2DEC(110) といった具合にでき...続きを読む

QHEX2BIN関数の使い方。

HEX2BINを使用して16進数4桁を2進数に変換しようとしたところ=HEX2BIN(B2) (B2セルは6F67)としたところ#NUMエラーが出てしまいます。

B2を”B2”にすれば変換ができたのですが今度はオートフィルが使えなくなってしまいます。

なので、=HEX2BIN(B2)で変換できる方法か””をつかってもオートフィルで=HEX2BIN("C2")などにする方法を教えて下さい Excelは2007です。

Aベストアンサー

> としたところ#NUMエラーが出てしまいます。

ヘルプでは数値に指定できるのは40ビットってなってますが、~1FFより大きい16進数は指定できません。


> B2を”B2”にすれば変換ができたのですが

B2セルの内容でなくて、B2という16進数を変換しています。
セル指定してるわけでないので、オートフィル出来ないのは自明。


> なので、=HEX2BIN(B2)で変換できる方法か

B2セルに、
1FF
B2
なんかの桁数の少ない16進数を指定するか、2バイトずつ桁数分けて2進数にするとか。
必ず4桁の16進数が指定されるのなら、
=HEX2BIN(LEFT(B2,2),8)&HEX2BIN(RIGHT(B2,2),8)
とか。

QEXCELでの16進数取り出し、上位桁と下位桁取り

恐れ入ります。詳しい方教えてください。

各セルに2000までの数値があるデータがあり、このデータを16進数表記で、上位2桁と下位2桁に分けたいと考えています。

例)
870  → &h03, &h66 (870は10進数で366が16進数、これを&hを付けて03と66に分けたい)
1926 → &h07, &h86 

="0x"&DEC2HEX(C4, 4)を使って16進数4桁にすることまでは調べたのですが、上位2桁、下位2桁に分けられず悩んでいます。

Aベストアンサー

いくつか方法はあるでしょうが、
A1に870があるとして
4桁固定でいいなら
上位2桁
=LEFT(DEC2HEX($A1,4),2)
下位2桁
=RIGHT(DEC2HEX($A1,4),2)

Q16進数を10進数に変換する方法...

お初にお目にかかります(^^)
簡潔に質問しますm(_ _)m

バージョン:MS-Visual Basic6.0
質問内容:
16進数を10進数に変換する方法がわかりません。
Hex(Text1.Text) や Oct(Text1.Text) のような方法で
16進数・8進数に変換できるんですが…
10進数に変換する方法がわかりません。

P.S できれば、16進数→10進数、16進数や10進数→2進数
…に、変換する方法も、よろしければ教えてくださいませ
m(_ _)m

Aベストアンサー

16進数→10進数は

Dim StrHex As String
Dim intVal As Integer
StrHex = "1A"
intVal = Val("&H" & StrHex)

で出来ます。


申し訳ありませんが2進数への変換はよく分かりません。

Qエクセルで16進数を2進数に変換した際に頭の0を表示させる方法は?

エクセルの関数についての質問です。
1つのセルに16進数で2e14という値があった場合に、これを一旦2進数に変換すると、計算機上では10 1110 0001 0100となります。
普通にこれがエクセル関数でできればいいのですが、桁数が問題なのか変換できませんでした。
そこで、2つのセルに2eと14に分けてから2進数表記して連接しようとしたのですが、そこで問題が起きました。
14の頭に0が3つついていますが、これが表示されませんでした。これを表示させないと当然連接した結果の値が全く違うものになってしまいます。
エクセル関数のHEX2BINを使った際に、変換後に頭の0が表示されるようなことは出来ないでしょうか。
エクセルなどに関してまだ素人当然なので教えて下さい。
よろしくお願いします。

Aベストアンサー

HEX2BIN("14",8)
でOKです。HELPに書いてありますが、2つ目の引数で桁を指定します。

QExcelで16進数の計算

セルA1にFFFF、セルA2にもFFFFが格納されているとします。
A1とA2の和をA3に16進数表記で格納することは可能でしょうか?

一度10進数に直さなければならないのかと思い、分析ツールのアドインを有効にし、A1の数式を【=HEX2DEC(FFFF)】と入力してみたのですがセルには#NAME?と表示されてしまいます。

エクセルの経験があまりないので、自分なりに調べてやってみましたがこの有様です。解決策をご存知の方がおられましたら、ご伝授をよろしくお願いします。

Aベストアンサー

あ、ごめんなさい。
式が間違っていました。

誤)=DEX2HEX(HEX2DEC(A1)+HEX2DEC(A2))

正)=DEC2HEX(HEX2DEC(A1)+HEX2DEC(A2))

でした。

# A1やA2はセルを指定する式なのでダブルクォートで
# くくる必要はないですよ。

QExcelでビット演算子?

Excelでビット演算子の
左シフト演算をさせることは
でるでしょうか?
0xff<<8 の演算をさせたいのですが
何か関数はあるでしょうか?

Aベストアンサー

エクセルにシフト演算子は無いような気がしますが,nビットシフトさせたいのであれば,2のn乗を掛けたら良いと思います。

例:A1セルを8ビット左シフトしたい場合
=A1*2^8

例:A1セルを8ビット右シフトしたい場合
=int(A1/2^8)

QExcel関数 16bit→32bi符号付き整数

お世話になります。

Excel2010にて、16bit符号付き整数の上位・下位の値が元データとしてあり、
それを32bit符号付き整数に関数を使って変換したいのですが、方法がわからず、質問させて頂きます。


セルA1に下位用 -1640
セルA2に上位用 -1
の時に
セルA3に32bit符号付き整数表示

わかられます方、ご助力のほどよろしくお願い致します。

Aベストアンサー

=IF(MOD(A2,65536)<32768,MOD(A1,65536)+MOD(A2,65536)*65536,MOD(A1,65536)+MOD(A2+32768,65536)*65536-2147483648)
で行けるかと思われます。

Q16進数の表し方について

すごく基本的なことだと思いますが、教えてください。
-128など、負の数を16進数で表す場合どのように表したら、
よいのですか。

Aベストアンサー

> ただ、まだ、-128が80Hになるのがわかりません。

2進数から16進数への変換は理解されているでしょうか?
-128を8ビットの2進数の2の補数で表現すると 10000000 なので、これを16進数にすると、80(Hex)になります。

数学では、何進数だろうが数値の前にマイナスを付けることで、負の数を表現できますが、
カテゴリがコンピュータなのでコンピュータ内部での負の数の扱い方という観点から説明しました。
負の数の表現には、2の補数以外にも、1の補数、符号ビット+絶対値、エクセス表現などがありますが、
2の補数(n進数のnの補数)は、減算を加算回路で計算できるという利点があるため広く使われています。

10000000だと、128なのか、-128なのか分からないじゃないか、と思われるかも知れませんが、
プログラマが、その時々に符号付き整数を扱っているのか、符号なし整数を扱っているのか、
認識していれば(又はコンパイラに指示をしていれば)混乱はありません。

http://mt-net.vis.ne.jp/ADFE_mail/0041.htm
http://www.sist.ac.jp/~suganuma/cpp/1-bu/1-sho/1-sho.htm

> ただ、まだ、-128が80Hになるのがわかりません。

2進数から16進数への変換は理解されているでしょうか?
-128を8ビットの2進数の2の補数で表現すると 10000000 なので、これを16進数にすると、80(Hex)になります。

数学では、何進数だろうが数値の前にマイナスを付けることで、負の数を表現できますが、
カテゴリがコンピュータなのでコンピュータ内部での負の数の扱い方という観点から説明しました。
負の数の表現には、2の補数以外にも、1の補数、符号ビット+絶対値、エクセス表現などがあります...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング