過去の質問を見てみたのですがよくわからなかったので質問します。
計算機の授業で十進数の負の数を十六進数に直すという方法を習ったのですが、いまいちわかりません。
問題は「次に示した十進数を二桁の十六進数で表せ」というもので、十進数は「-34」「-105」などです。
基本的なことは分かっているつもりです。
上記の問題の解き方を教えてください。
よろしくお願いします。

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

A 回答 (5件)

こんにちは。



単刀直入に答えを書きますと、
十進の-34は十六進だとD7h、
同じく-105は十六進だと97hです。

ちなみに-1はFFhとなります。
十進の-1を2桁の16進にする場合を例にして説明しますと、
1を二進に直すと 0000 0001
全桁を反転します 1111 1110
 1を加えます   1111 1111
これを十六進に直す  F    F
ですね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
よく分かりました。
やっと疑問がはれました。
やっぱり二進数のときに8桁にしなければならないのですね。
助かりました。
本当にありがとうございました。

お礼日時:2003/11/03 23:55

負の10進数を16進数に直すのはちょっと大変です。


負の2進数に直してから4ビット区切りで16進数にするのが実用的です。
    • good
    • 0
この回答へのお礼

ようやく分かりました。
ありがとうございました。

お礼日時:2003/11/03 23:57

絶対値をとって16進数で表記し、-(マイナス記号)をつけるだけです。

お手元の計算機のテキストにもそう書いてあるはずです。

計算機内でどう表現するかはまた別の問題です。整数の場合、#1の方のご回答にあるように補数を使うのが多いですね。理屈上MSB1ビットを符号用に確保し、残りのビットで絶対値を表現する形式もあります。実数(固定小数点、浮動小数点)の場合、絶対値+符号で表現されます。

十進数コンピュータがあったとしたら、負数はどう表現されるか想像しながら問題を解いて下さい。

この回答への補足

回答ありがとうございます。
質問の仕方が悪かったみたいなので補足します。
十六進数に直すとき、マイナスの記号はつけないやり方のようです。

補足日時:2003/11/03 22:35
    • good
    • 0
この回答へのお礼

ようやく分かりました。
ありがとうございました。

お礼日時:2003/11/03 23:57

負の数というのがよく分かりませんが、正の数として処理し、マイナスをつけるのでいいのでしょうか?


 第1位は「16の0乗、つまり1がいくるあるか」
 第2位は「16の1乗、つまり16がいくつあるか」
 第3位は「16の2乗、つまり256がいくつあるか」
 を表します。
 十進数の34は16×2+1×2だから十六進数では「22」よってー34なら「ー22」
 十進数の105は16×6+1×9だから十六進数では「69」よってー105なら「-69」ではいけないのでしょうか?
    • good
    • 0
この回答へのお礼

ようやく分かりました。
ありがとうございました。

お礼日時:2003/11/03 23:57

まずは2進数に直してから16進数に変換してみるとわかりやすいと思います。



詳しくは参考URLを見てみてください。

参考URL:http://www005.upp.so-net.ne.jp/h-masuda/ProText/ …

この回答への補足

回答ありがとうございます。
ひとつ質問なのですが、二進数に直すとき、8桁必要なのですか?
たとえば十進数の「2」は二進数では「00000010」のように。
この部分が教科書には書いていないので、あいまいでよく分からないのです。

補足日時:2003/11/03 22:40
    • good
    • 0
この回答へのお礼

理解できました。
ありがとうございました。

お礼日時:2003/11/03 23:56

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

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

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

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

Q8進数から16進数への変換

8進数から16進数、また、16進数から8進数に
計算過程でほかの進数に変換することなく直接変換できますか?

Aベストアンサー

例:
8進の 324 を16進に。
32 と 4に分ける
32 を 2で割る → 15 あまり 0
あまり0なので、4はそのまま。
15を1 5 に分ける。
1を2で割る→ 0 あまり 1
あまり1なので、 5に+8する
0になったので終了。 答えは D4

等というように、ビットシフトと等価な計算はできます。
ただ、これを「他の進数に変換していない」と言っていいか微妙です。

それに、2進数にして区切りを変更する方が楽なのではないでしょうか。
324 → 011 010 100 → 0 1101 0100 → D4

Qn進数→10進数  10進数→n進数 の変換ってできる?

10進数を2進数にするやりかたはわかるんですが、
2進数→10はイマイチわからないです。
その他10進数→12進数とか、その逆とか、なにか公式とかないんでしょうか?

Aベストアンサー

10進数、2進数に限らず、n-進数(n≧2の自然数)の意味(定義)をしっかり理解すれば、どんな変換でもできるようになるでしょう。
ただし単純な公式ということではなく、幾つかのステップを踏む計算法が作れる、ということになります。

ここから、「3の5乗」を「3^5」のように書くことにして……
例えば2進数から8進数の例を考えて見ましょう。
100101(2)を8進数で表すとどうなるか。
6桁の2進数ですから
100101(2)
= 1×2^5
+ 0×2^4
+ 0×2^3
+ 1×2^2
+ 0×2^1
+ 1×2^0
(左の数字が2進数の各桁の数、真ん中が「2進数」の2、右端が桁を表す数です。この真ん中の数を8にして、全体の量が変わらなければいいわけ。)
=32+4+1=37(←この行は10進数)
= ?×8^n(何桁か分からないのでnとしてみました)
+ ……
+ ?×8^0(?はすべて0~7の整数)
さて、8^2=64 は問題の数37より大きくなってしまうので、n=1です。
= ?×8^1
+ ?×8^0
= 4×8^1(←ここだけだと32、問題の37まで5足りないので、次の行……)
+ 5×8^0
= 45(8)
となります。

10進数、2進数に限らず、n-進数(n≧2の自然数)の意味(定義)をしっかり理解すれば、どんな変換でもできるようになるでしょう。
ただし単純な公式ということではなく、幾つかのステップを踏む計算法が作れる、ということになります。

ここから、「3の5乗」を「3^5」のように書くことにして……
例えば2進数から8進数の例を考えて見ましょう。
100101(2)を8進数で表すとどうなるか。
6桁の2進数ですから
100101(2)
= 1×2^5
+ 0×2^4
+ 0×2^3
+ 1×2^2
+ 0×2^1
+ 1×2^0
(左の数字が2進数の各桁の数、真...続きを読む

Q2進数から16進数への変換、あるいはその逆について

はじめまして。
高校の情報の授業で「2進数・10進数・16進数」を勉強しています。
どうしても2進数から16進数への変換、あるいは、16進数から2進数への変換の方法がわかりません・・・

初心者でも分かりやすい解説をお願いします。

Aベストアンサー

2進数の各桁を、右から4桁毎に区切って、その4桁を右から1,2,4,8という具合に割り当てます。
その4桁を、16進数の1文字に対応させて、そのまま置き換えるだけです。
これを、2進数の4桁毎に、繰り返せば複数桁の16進数になります。

逆に、16進数を2進数にする場合は、16進数を1桁ずつに分解し、それぞれを2進数4桁に置き換えて、全体を繋げれば完成です。

2進数:16進数:中身
0000=0=0そのまま
0001=1=1そのまま
0010=2=2そのまま
0011=3=2+1
0100=4=4そのまま
0101=5=4+1
0110=6=4+2
0111=7=4+2+1
1000=8=8そのまま
1001=9=8+1
1010=10=8+2
1011=11=8+2+1
1100=12=8+4
1101=13=8+4+1
1110=14=8+4+2
1111=15=8+4+2+1

Q補数と進数

補数というものがよくわかりません。
参考書を読んだのですが、いまいち理解できませんでした…。
(0111 1110)※2(小さい2は※2と表記します)の2の補数を求めろ、という問題は、どのようにして解けばよいのでしょうか。

また2進数についてなのですが、2進数を用いて(38+18)を計算せよ、という問題があります。
これは、(3×2の1乗+8×2の0乗)+(1×2の1乗+8×2の0乗)
=6+8+2+8=14.

…で答えは14??と思ったのですが、答えもないのでわかりません;
全然違っていたら是非解き方を教えてください。

Aベストアンサー

No.1です。いやぁ、言葉足らずでスイマセン(^^;

(36)※10=(100100)※2
これの2の補数は(011100)※2
2の補数の求め方はわかりますよね

(56-36)というのは(56+(-36))
ですね?ここは大丈夫でしょうか?

さて、2の補数とは、
「変換前の数に、マイナスを掛けたもの」と同じような働きをします。

つまり
「56-36」=「56+(36の2の補数)」
という関係があります。
わかりやすく絞ると
-36=36の2の補数
です。だから
(-36)※10=(011100)※2

そして、計算してみると確かに(118-72)※10=(1010100)※2になります。

さて、
「補数を使った足し算をしたら、計算結果の一番左の数を無視するのが特徴」
なんです。

質問者さんが苦労して求められた(1010100)※2
一番左の数を見ないで下さい
そうすると
2^4+2^2=20
ですよ

Q8桁文字列を16進数バイト配列に変換

お世話になります。
VB2005を使用しています。
温調器から温度データを引っ張るプログラムを作成しています。
8桁の文字列を16進数バイト配列に変換したいのですが、GetBytesでは10進数バイト配列に変換されてしまいます。
8桁の文字列又は10進数バイト配列を16進数バイト配列に変換する方法はないでしょうか?
文字列を1文字ずつ16進数に変換して配列に組み込んでいくしかないのでしょうか?
よろしくお願い致します。

Aベストアンサー

その温度計のメーカーには問い合わせしたのでしょうか
サンプルとかはないのですか

たとえば "GET" といった文字列を送りたい場合
どのように変換したものを送ればいいのかなど

"GET" を "474554"といった文字列に変換して送信なのか
『474554』といった文字列が必要なら

dim bld as new System.Text.StringBuilder
dim ss as string
for each _byte as Byte in AryByte
  bld.Append( String.Format( "{0:X2}", _byte ) )
next
ss = build.ToString
SerialPort1.Write( ss, 0, ss.length )
といった具合でよさそうですが

メーカのWebページなどにその機器の使い方のサンプルがあるなら
明示してみるといいかもしれませんよ

Q十個の数、或いは十進法の発明は必然なのでしょうか

こんにちは。

なぜ十進法が一般的なのか、と言えばアラビア数字が0を含めて十個あるからという理由が上がりそうですが、すると今度はなぜそれが10個なのだろうという疑問が浮かび上がります。
その答えとしては、ひとつに偶然。たまたま十個あるだけで、本当は六個でも九個でも十四個でも良かった。
しかしながら、ローマ数字にも十個目のカウントにはそれ専用の割り当てがなされており、五個と十個は特別視されていると言わざるを得ません。

何かしらの理由で、数学的には十という区切りは必然的なものだったのか、あるいは古来からの伝統を踏襲しているだけで、それが生活に馴染んでいるために便利であるだけ、と考えるべきなのか。
実際のところどうなんでしょうか?

Aベストアンサー

10進法は不便な進数ですよね。12進数のほうが便利
二人でも三人でも四人でも六人でも、獲物を山分けできる。
一日を半分にして、さらに半分にして、そのさらに半分とか・・。
10進数は、まったく「取り得」ないですが、人間の指の数が10本だったのでその偶然。
コンピューターではさすがに不便なので、二進数、四進数、八進数、十六進数

Q16進数を10進数に簡単に変換する関数は?

16進数を10進数に簡単に変換する関数は何かありますか?
もしご存知でしたら教えていただけないでしょうか?

例えば、3BDF8という16進数を10進数に変換したいと思っています。

Aベストアンサー

C言語のプログラム内では、保持している数値にn進数という概念はなく
文字列化するときに初めて考えるものです。

int n; // <- このnは何進数でもない

ご質問を以下のように解釈してサンプルを書いてみました。

例えば、3BDF8という16進数(の文字列)を10進数(の文字列)に変換したいと思っています。


$ cat test.c
#include <stdio.h>

int main(int argc, char *argv[])
{
int num;
sscanf(argv[1], "%x", &num);
printf("%d\n", num);
}

$ ./a.out 3BDF8
245240

いかがでしょうか。

Q負の数×負の数

負の数×負の数をよりわかりやすく解説する指導法などあったら教えてください。

Aベストアンサー

そもそも負の数とは何かを・・
小学校で、「掛け算には順番がある」「小さい数(かず)から大きい数(かず)は引けない」などは、習ったはずです。
中学校で、それらの数を抽象的な数(数)を導入するに当たって
[置換]
A?B=B?A ・・・?は任意の四則計算
[結合]
A×B + A×C = A×(B+C)
[分配]
A×(B+C) = A×B + A×C
に進むに当たって、小学校で学んだ「掛け算には順番がある」「小さい数(かず)から大きい数(かず)は引けない」を拡張する必要がありましたね。

 単位と数を切り離す、(実世界のかずから数学の数の世界に)ことによって、これらの法則が使えるようになったはずです。
 2-3 はできないのですが、2 + (-3) と【負の数】を導入することで、
2 + (-3) = -1 と書き直すことができます。
※ 2 - 3 = 3 - 2 でしたが、2 + (-3) = (-3) + 2 = -1
と、単位から脱却すると置換の法則も使えるようになります。
 ・・・数(かず)が現実から拡張されて数(すう)となり数学として研究できる。

 割り算も同様に
4 ÷ 3 は、割り切れませんが、4 × (1/3) = 4/3
 これは、割り算とはその数の逆数を掛けることに等しいので、分数を導入(小学校)したはず。
 これによって
4 ÷ 3 ≠ 3 ÷ 4 ですが
4 × (1/3) = (1/3) × 4
 もOKになりましたね。

 これによって、数を未知数に置き換えて、すべての数がひとつの公式で扱えるようになりました。
二次方程式を ax² + bx + c = 0 なんて書き表せるのはこれらを学んだ上でした。

負の数は、A × (-1)と置ける
任意の自然数Aについて、A × x を考えて見ましょう。xを横軸に、その結果を縦軸に考えると、xの数が小さくなるに連れて計算結果は小さくなっていきます。
 たとえば、Aが2だと、x=10 なら20、5なら10、1なら2、では0だと 0 、じゃ -1だと?
 これは足し算で考えても良いですね。
-1 をかけるということは、大きさ(0からの距離)は同じで数直線上の左右が変わるだけです。

・・とにかくこの段階でもっとも大事なことは
・引き算は負の数を加えること
  負の数とは、正の数に -1 をかけたもの
・掛け算は逆数をかけること
 だから、「掛け算には順番がある」「小さい数(かず)から大きい数(かず)は引けない」の制約から脱して数--それが未知数であっても---を自由に扱えるようになること。・・・ここを理解させておかないと、先には進めません。
 数直線を使うのが良いでしょう。

 では、負の数の計算ですが、任意の数において[置換][結合][分配]が成り立つなら
-A × -B は、(-1) × A × (-1) × B と書き換えられます。置換で
(-1 )× (-1) × A × B
ですから、(⁻1)×(-1) ×A×B = 1×A×B = A×B

>負の数×負の数をよりわかりやすく解説する指導法

 数の拡張をしっかり指導できていれば、苦はないはずです。その前の段階の指導を見直してください。それができていないと、No.2山河紹介されたサイトのように苦労することになるでしょう。
 指導方法は、いくつかあると思いますが「あれこれ摘み喰いをせずに、決めたら徹底的にその方法で理解させること」「全員が理解できたら、はじめて他の切り口も説明すること」これがすべての教科にとって大事なことではないかと思います。ひとつの方法が分からないうちに他の方法を説明しても混乱するだけですからね。

そもそも負の数とは何かを・・
小学校で、「掛け算には順番がある」「小さい数(かず)から大きい数(かず)は引けない」などは、習ったはずです。
中学校で、それらの数を抽象的な数(数)を導入するに当たって
[置換]
A?B=B?A ・・・?は任意の四則計算
[結合]
A×B + A×C = A×(B+C)
[分配]
A×(B+C) = A×B + A×C
に進むに当たって、小学校で学んだ「掛け算には順番がある」「小さい数(かず)から大きい数(かず)は引けない」を拡張する必要がありましたね。

 単位と数を切り離す、(実世界のかずから数学の数の世界に)...続きを読む

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なぜ、負の数×負の数=正の数になるのですか?

負の数×負の数の計算結果は必ず正の数になりますが、この理由はなんなんでしょうか?証明できる方いませんか?マイナスにマイナスをかけるとプラスになるのはわかるのですが、その理由がわかりません。

Aベストアンサー

例えば(-1)×(-1)を考えると

 (-1)×(-1)=(-1)×(-1)+0

 ここで(-1)+1=0より 上記式の右辺は

 =(-1)×(-1)+(-1)+1
 分配法則A×B+C×B=(A+C)×Bより
 上記式は

 =〔(-1)+1〕×(-1)+1
 ここで(-1)+1=0なので

 =0×(-1)+1  0×(-1)=0だから
 =0+1=1

 つまり(-1)×(-1)=1となる。

 一般的には文字を使って上記のようなことをやれば証明はできます。技巧的のようもしますが。
 

  

 


人気Q&Aランキング