入出力のときはJISの文字コード表の値が使われ、それ以外の計算などにおいては通常の2進数が使われるとのことですが、その変換はどのように行うのでしょうか。

テキストには「1~9の文字には16進数の(0030)を減算」「A~Fの文字には(0037)を減算」と書いてあります。

例えば
’5’は内部コードでは(0035)、
16進数の数値では(0005)
数値と文字コードの差は16進数で(0030)

というのは理解できます。

ただアルファベットになると理解できません。

例えば
’A’は内部コードで(0041)
16進数の数値では(000A)
数値と文字コードの差は16進数で(0037)

なぜここで(0037)になるのでしょうか・・。
(0041)を(0037)で減算し、(000A)になるまでの過程を教えてください。

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

A 回答 (2件)

文字→数値変換ですね。


説明が面倒ですが、内容はごく単純です。頭をやわらかくして。

0 = 文字コード(0030) - (0030)
1 = 文字コード(0031) - (0030)
2 = 文字コード(0032) - (0030)
5 = 文字コード(0035) - (0030)
9 = 文字コード(0039) - (0030)

ここで、A = 文字コード - 0030 と同様にやりたいところですが、駄目です。
文字コード表を見ればわかる通り、1~9の文字コードとA~Fの文字コードは離れているので。(連続値として変換できない)
A~Fは基準点になる0030という数値が変わってきます。

A = 文字コード(0041) - (0041) + (000A)
B = 文字コード(0042) - (0041) + (000A)
F = 文字コード(0046) - (0041) + (000A)

この、-0041+000A を計算してまとめると、-0037

A = 文字コード(0041) - (0037)

となります。

こんな手法プログラム作成時に本当にやるのか!と言われそうですが、
使う人は使いますし、知っておいて損はないです。
    • good
    • 0
この回答へのお礼

非常に分かりやすくて助かりました!

基本情報も無事高得点も取れて、たまたまこの文字コードに関する問題も出ました!
ありがとうございました!

お礼日時:2014/10/23 12:52

>数値と文字コードの差は16進数で(0030)


>というのは理解できます。

0035 - 0005 = 0030

>なぜここで(0037)になるのでしょうか・・。

0041 - 000A = 0037 (10進だと、65 - 10 = 55 )

全く同じ構造です。
    • good
    • 0
この回答へのお礼

ありがとうございました!

お礼日時:2014/10/23 12:52

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

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

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

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

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

QCASLII4桁の16進文字列を数値に変換するプログラム

問 4桁の16進文字列を入力し、それを数値に変換してメモリ上に格納するプログラムを作成せよ。

PROGRAM START
IN IBUF,LEN
LAD GR1,0
LAD GR2,0
LOOP SLL GR1,4
LD GR3,IBUF,GR2
CPL GR3,='A'
JMI NEXT
ADDL GR3,=9←←←
NEXT AND GR3,C000F
ADDL GR1,GR3
LAD GR2,1,GR2
CPL GR2,=4
JMI LOOP
ST GR1,ANS
RET
IBUF DS 4
LEN DS 1
C000F DC #000F
ANS DS 1
END

上記の←←←の行は入力文字がA~Fの場合の数値の調整の為にあるらしいのですが、なぜ9を加算しているのか分かりません。ご理解のある方はお手数ですが教えて頂けないでしょうか。よろしくお願い致します。

問 4桁の16進文字列を入力し、それを数値に変換してメモリ上に格納するプログラムを作成せよ。

PROGRAM START
IN IBUF,LEN
LAD GR1,0
LAD GR2,0
LOOP SLL GR1,4
LD GR3,IBUF,GR2
CPL GR3,='A'
JMI NEXT
ADDL GR3,=9←←←
NEXT AND GR3,C000F
ADDL GR1,GR3
LAD GR2,1,GR2
CPL GR2,=4
JMI LOOP
ST GR1,ANS
RET
IBUF DS 4
LEN DS 1
...続きを読む

Aベストアンサー

文字列の0~9の文字コードは16進表記では30~39です。同様に文字列のA~Fは16進表記では41~46です。
0~9は下位4ビットが0~9でいいのですがA~Fは下位4ビットが1~6ですよね。だから9足してA~Fにしておくのだと思います。

Q基本情報技術者試験の問題(進数変換)

基本情報技術者試験の過去問を解いてるのですが、どうしても分からないんです。

以下原文

負数を2の補数で表現する符号付き16ビットの2進数を16進数で表記したもののうち、四倍するとけた あふれが生じるものはどれか。

不明な点は選択肢にあるDFFFという16進数表記が10進数にすると「-8193」になると解説に書いてある点です。DFFFを2進数にする方法は分かるのですが…。

よろしくお願いいたします。

Aベストアンサー

先ず、「符号付き」とあるので、左端の1桁(ビット)は符号(0:正、1:負)であり、残りの15桁が整数値を表すことに注意。
2進数は、16進数と対応させるために4桁で区切って、敢えてブランクを入れると扱い易くなる。
問題の数値の整数部分は、(5FFF)
この2進表現は、
101 1111 1111 1111
元に戻すと、
010 0000 0000 0001 <--右端から見て最初の1まではそのまま、それから先はすべて反転させる。
これを10進数に変換すると、
8193=4096 X 2 + 256 X 0 + 16 X 0 + 1

マイナスの符号が付いていたので、本当は(-8193)

16進数は2進の4桁に対応するので、これを10進に変換する際の乗数は暗記した方が良い。
電卓で、16 X =、=、=、とやると出てくる数字、すなわち、16、256、4096、65536、ま、これ以上は無理でしょう....

負数を2の補数で記憶する意味は、コンピュータの減算回路の合理化だそうです。

参考URL:http://ja.wikipedia.org/wiki/2%E3%81%AE%E8%A3%9C%E6%95%B0

先ず、「符号付き」とあるので、左端の1桁(ビット)は符号(0:正、1:負)であり、残りの15桁が整数値を表すことに注意。
2進数は、16進数と対応させるために4桁で区切って、敢えてブランクを入れると扱い易くなる。
問題の数値の整数部分は、(5FFF)
この2進表現は、
101 1111 1111 1111
元に戻すと、
010 0000 0000 0001 <--右端から見て最初の1まではそのまま、それから先はすべて反転させる。
これを10進数に変換すると、
8193=4096 X 2 +...続きを読む

Q1の補数の2進数での減算(基本的な事だけど)

たとえば(13)10=(01101)2, (8)10=(01000)2
という数値を元に考えてみます。
1の補数なので
(-13)10=(10010)2 , (-8)10=(10111)2 となります。
ここで8+(-13)と(-8)+13を求めたいのです。
<8+(-13)>
((01000)2
+(10010)2
((11010)2 bit反転→ (00101)2 = (5)10
よって (11010)2 = (-5)10

<(-8)+13>
(((10111)2
+((01101)2
((100100)2 bit反転→ (011011)2 = ??

どうして答えが5の2進数表現にならないのでしょうか?
解き方が違うのならば、その理由が知りたいのです。

Aベストアンサー

循環桁上げが起こるためです。
位が元々の桁数以上にあがった場合その上がり値を一番下の位に足しあわせるのです。
今回の場合、100100の先頭の1をとり一番下の位の0に足しあわせます。
100100→00101となり、答えは正の5となるわけです。

Q文字コードの違い、特徴の暗記方法を教えてください

文字コードの違い、特徴の暗記方法を教えてください。ASCIIコード、JISコード、シフトJISコード、Unicodeなどなど、、、試験に基本情報技術者試験に出題されるようですがさっぱりわかりません。無理に暗記するしかないのでしょうか。なにかよい方法を教えてください。語呂暗記などもお願いします。わけもわからず記憶するのはきついです。よろしくお願いいたします。

Aベストアンサー

基本情報技術者試験・午前の問題において,文字コードの問題は出題されても1問だけですよね。きちんと理解しようとすると,とても複雑で規格名もたくさん登場する世界なので,試験対策と割り切って,

  無理に暗記する,わけもわからず記憶する

方が楽だと思います。英数字や日本語文字が1文字=何ビットで構成されているか,なんてことは覚える必要がなく,次のキーワードを覚えていれば基本情報の四択問題は正解できるように思います。

ASCII
  情報交換のためのアメリカ標準コード。1文字=7bit。英数字のみ。

JISコード
  エスケープシーケンスを用いたモード切替で日本語文字を扱う。

Shift_JIS
  エスケープシーケンスを用いずに半角文字と全角文字の混在が可能。

EUC-JP
  拡張UNIXコード(日本語)。WindowsではなくUNIXで用いられる。

Unicode
  世界で使われるすべての文字を共通の文字集合で扱おうとする符号体系。

Q問:負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示

問:負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示したもののうち、4倍するとあふれが生じるものはどれか。
ア 1FFF
イ DFFF
ウ E000
エ FFFF
以下は、それぞれを2進数表示にしたものです。
先頭の符号ビットは[0]の表記で目立たせてあります。
ア [0]001 1111 1111 1111
イ [1]101 1111 1111 1111
ウ [1]110 0000 0000 0000
エ [1]111 1111 1111 1111
以下は、4倍したもの
ア [0]111 1111 1111 1100
イ [0]111 1111 1111 1100
ウ [1]011 0000 0000 0000
エ [1]111 1111 1111 1100


この場合は、ア以外は負数ですが、『負数を2の補数で表現する符号付き16ビットの2進数を、16進数で表現した場合』は16進数が正の数でも、2進数だと負数になると言う事でしょうか?
また、符号付きでない場合は、上記はすべて正の数と言う事で合ってますか?
回答を見る感じでは16進数を2進数に変換しただけで、『2の補数で表現』の部分がないように思えます。この辺りも知りたいです。


問題の解き方についても疑問があります。
http://questionbox.jp.msn.com/qa4278151.html
での回答では、
イ DFFF
→(シフト前)1101 1111 1111 1111
→(シフト後)0111 1111 1111 1100
先頭ビットが1から0に変わったので「桁あふれ」。
問題集の回答ではこっちで説明されていました。

http://okwave.jp/qa/q4302488.html
のANo2回答では
(シフト前)[1]101 1111 1111 1111
(シフト後)[1]111 1111 1111 1100
2の補数表現による負の数の場合,シフト操作によって1が消えていくのは問題ない。
シフト操作によって0が消えると結果が変になる。これが「あふれ」

符号はシフトさせず、左に2つシフトさせた事で、10が消えた事で桁あふれとしています。

ANo1の回答では、
DFFFだと同様に
1101 1111 1111 1111で1の補数は
0010 0000 0000 0000 2の補数は
0010 0000 0000 0001 つまり、-8193ですよね。
4倍すると、-32772で、これは16ビットの2の補数表現
で表現できる数の範囲からあふれてしまいます。

DFFFなどの2進数に変換後、2の補数を使用するのが正しいのでしょうか?
最初の2つの回答では2の補数を使用していなかったので、疑問に思っています。


頭が混乱しております・・・。
回答宜しくお願い致します。

問:負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示したもののうち、4倍するとあふれが生じるものはどれか。
ア 1FFF
イ DFFF
ウ E000
エ FFFF
以下は、それぞれを2進数表示にしたものです。
先頭の符号ビットは[0]の表記で目立たせてあります。
ア [0]001 1111 1111 1111
イ [1]101 1111 1111 1111
ウ [1]110 0000 0000 0000
エ [1]111 1111 1111 1111
以下は、4倍したもの
ア [0]111 1111 1111 1100
イ [0]111 1111 1111 1100
ウ [1]011 0000 0000 0000
エ [1]111 1111 1111 1100
...続きを読む

Aベストアンサー

論理シフトと算術シフトの2種類を理解することは,
基本情報技術者試験の試験範囲に含まれています。
http://akademeia.info/index.php?%A5%B7%A5%D5%A5%C8%B1%E9%BB%BB

データ型が符号なし整数や文字型であったなら論理シフトの動作になりますし,
データ型が符号あり整数(2の補数)だったなら算術シフトの動作になります。
シフトによって正数が突然負数になったり,負数が突然正数になったりするのは異常な事態ですから,それを避けるために符号ビットを動かさない「算術シフト」が用いられます。
今回の問題は「負数を2の補数で表現する符号付き16ビットの2進数」と明記してありますから,その動作は算術シフトです。

よって,下記の私の解説が正しいです。
> http://okwave.jp/qa/q4302488.html のANo2回答


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

人気Q&Aランキング

おすすめ情報