HOME»基本情報技術者試験掲示板»【科目B】新制度サンプル問16について
投稿する
ご回答ありがとうございます。
ひと通り参考書も終えたのですが、この基本的な解釈について説明されておらず、目から鱗状態です💦
今回は、16進数なのでA~Fは整数型では扱えないことは分かったのですが、まだモヤモヤしております…
仮に、引数として、●(10)や●(8)の整数値が渡されるものとするとされていた場合でも、引数は2進数としてプログラムを読み進めればいいのでしょうか?
いいえ、16進数は整数です。整数は16進数で表現できます。
プログラミングにおいては「整数型」のデータが渡される、という制限しかありません。
コンピュータにとってすべてのデータはbit列であり、コンピュータはそれが何進数か知りません。
ですから、10進数しか渡せない、8進数しか渡せない、16進数しか渡せない、ということはありません。
すべて同じbit列 01001010 に対する、人間の都合による表現の違いでしかありません。
上記が分かりづらいようなら、(現段階では)以下は無視した方がよいと思いますが。
文字型のデータ3つ('1','1','2')を渡してそれを1バイトの整数型データ 74(10進数表現)に変換する、とか、
文字型のデータ2つ('4','A')を渡してそれを1バイトの整数型データ 74(10進数表現)に変換する、など。
8進数と見なした/16進数と見なした「文字列を渡す」というのなら話は別になります。
非常に丁寧に解説いただき、ありがとうございます。
冒頭の具体例が非常に分かりやすかったです!
「コンピュータが扱える数は2進数のbit列」この基本を忘れていました!
このbit列を人間が分かりやすい表現方法にしたものが8進数や16進数という訳ですね!
だから、人間からコンピュータに渡すということは、n進数→2進数で渡すということ!
但し、文字列型で渡すと、文字として認識されるということですね?
プログラムを読み進める以前の誤認、とても助かりました。
皆さま、ありがとうございました。
【科目B】新制度サンプル問16について [5925]
わんわんさん(No.1)
▼【科目B】新制度サンプル問16
https://www.fe-siken.com/kakomon/sample/b16.html
初歩的な内容で恐縮なのですが…
encodeの引数が2進数として渡されることは、問題文のどこから読み取れるのでしょうか?
問題文の末尾には、次のように記載されています。
encodeには、引数として、800(16)以上FFFF(16)以下の整数値だけが渡されるものとする
また(16)と記載した場合は、その数値が16進数であることを表すとも記載されていることから、
引数は、16進数で渡されると考えてしまいました。
よって、先ずは2進数への基数変換として、プログラムを考えて混乱に陥りました…
utf8Bytesの注釈のように、
codePointについても注釈がなければ分からないと思うのですが、どう解釈すればいいのでしょうか?
https://www.fe-siken.com/kakomon/sample/b16.html
初歩的な内容で恐縮なのですが…
encodeの引数が2進数として渡されることは、問題文のどこから読み取れるのでしょうか?
問題文の末尾には、次のように記載されています。
encodeには、引数として、800(16)以上FFFF(16)以下の整数値だけが渡されるものとする
また(16)と記載した場合は、その数値が16進数であることを表すとも記載されていることから、
引数は、16進数で渡されると考えてしまいました。
よって、先ずは2進数への基数変換として、プログラムを考えて混乱に陥りました…
utf8Bytesの注釈のように、
codePointについても注釈がなければ分からないと思うのですが、どう解釈すればいいのでしょうか?
2025.06.07 12:16
マンドリルさん(No.2)
引数codePointは整数型とありますので、文字列ではありません。引数は整数型(C言語でいえばint、ただし範囲は0x0800-0xFFFF)のため、内部では2進数と考えて差し支えありません。
この関数がしたいことは、冒頭にあるように、UTF-8の符号が3バイトになるようなUnicode符号の整数を入力して、UTF-8の3バイト符号(8ビット、配列サイズ3)を返すことです。C言語でいえばunsigned char[3]の配列です。
基数は、2進数であっても16進数であっても、人間がわかりやすくするためのひとつの表現方法にすぎません。コンピュータ内部は2進数しか扱えません。他の問題でも整数型とあれば、基本は2進数で、文字コードとして扱うものではないと考えるとわかりやすいかと思います。
この関数がしたいことは、冒頭にあるように、UTF-8の符号が3バイトになるようなUnicode符号の整数を入力して、UTF-8の3バイト符号(8ビット、配列サイズ3)を返すことです。C言語でいえばunsigned char[3]の配列です。
基数は、2進数であっても16進数であっても、人間がわかりやすくするためのひとつの表現方法にすぎません。コンピュータ内部は2進数しか扱えません。他の問題でも整数型とあれば、基本は2進数で、文字コードとして扱うものではないと考えるとわかりやすいかと思います。
2025.06.07 16:04
電タックさん(No.3)
★FE ブロンズマイスター
今回の問題であれば引数の型が”整数型”となっている。という事とコンピュータ内部での解釈はNo.2の回答の通りとなります。
じゃあ2進数の値を渡したの?というよりもある数字を渡したに過ぎないと考えてください、またその数字は基本的には10進数で扱った時の値です。
例:encode(10) > これは10を渡しています。2ではありません。
進数表現はあくまである人間がその数字をどう表現するかでしかありません。整数であって2進数で渡すというのは擬似言語ではないと思って良いかもしれません。
※実際の言語では0x10の表にすると16進数の10として扱いなさいというような特殊指定ができる言語がありますが疑似言語ではそのような指定は無かったと思います。
ただ今後擬似言語の問題で2進数で表現された”文字列”を整数にして返却するやその逆を行う問題が出てくるかもしれません。
文字列で表現された数字であった場合、例えば”1010”これは10進数or2進数かは問題文から判断しないと行けない時があるかもしれません。
じゃあ2進数の値を渡したの?というよりもある数字を渡したに過ぎないと考えてください、またその数字は基本的には10進数で扱った時の値です。
例:encode(10) > これは10を渡しています。2ではありません。
進数表現はあくまである人間がその数字をどう表現するかでしかありません。整数であって2進数で渡すというのは擬似言語ではないと思って良いかもしれません。
※実際の言語では0x10の表にすると16進数の10として扱いなさいというような特殊指定ができる言語がありますが疑似言語ではそのような指定は無かったと思います。
ただ今後擬似言語の問題で2進数で表現された”文字列”を整数にして返却するやその逆を行う問題が出てくるかもしれません。
文字列で表現された数字であった場合、例えば”1010”これは10進数or2進数かは問題文から判断しないと行けない時があるかもしれません。
2025.06.07 16:40
わんわんさん(No.4)
> マンドリルさん
> 電タックさん
ご回答ありがとうございます。
> 整数型とあれば、基本は2進数
ひと通り参考書も終えたのですが、この基本的な解釈について説明されておらず、目から鱗状態です💦
今回は、16進数なのでA~Fは整数型では扱えないことは分かったのですが、まだモヤモヤしております…
仮に、引数として、●(10)や●(8)の整数値が渡されるものとするとされていた場合でも、引数は2進数としてプログラムを読み進めればいいのでしょうか?
2025.06.07 18:30
jjon-comさん(No.5)
★FE プラチナマイスター
コンピュータは、すべてのデータをbit列で扱います。
・8bit長の 2進数データ 01001010 を渡す
・8bit長の 8進数データ 112(8) を渡す(3bit区切りで 01, 001, 010)
・8bit長の16進数データ 4A(16) を渡す(4bit区切りで 0100, 1010)
・8bit長の符号なし10進数 74 を渡す(2の6乗+2の3乗+2の1乗)
・8bit長の符号あり10進数 74 を渡す(先頭の符号bitが0なら正の数)
・文字 'J' を渡す(ASCIIコード表の 0x4A)
・8つの画素が [消灯, 点灯, 消灯, 消灯, 点灯, 消灯, 点灯, 消灯] であることを表したByte型の画像データを渡す
等々、
上記において、渡されるデータはすべて同じで 01001010 です。
そのままでは何の意味も持たない単なるbit列に対して「このような意味を持つデータだと規定する」と解釈に制限をかける仕組みが「データ型」です。
整数型、浮動小数点型、文字型、参照型(ポインタ)、画像型、等々ありますが、すべて渡されているのはbit列です。
また、[off, on, off, off, on, off, on, off] というbit列の状態をこのように長々と書くのはメンドウなので、これを数値で表記したのがN進数表記です。
8進数の 112、16進数の 4A、10進数の 74、等々ありますが、すべて渡されているのは 2進数の 01001010 です。
----
サンプル問題 科目B 問16
https://www.fe-siken.com/kakomon/sample/b16.html
はい、その通りです。
この問題におけるデータ型「整数型」は「16bit長で符号なし整数を格納する」という制限をかけています。
整数を10進数で表記しようとするのは私たちが小学校からそれに慣れ親しんでいるからであり、その同じ整数を 2進数でも 8進数でも 16進数でも表記できます。必要に応じてどのようにも解釈できます。
・8bit長の 2進数データ 01001010 を渡す
・8bit長の 8進数データ 112(8) を渡す(3bit区切りで 01, 001, 010)
・8bit長の16進数データ 4A(16) を渡す(4bit区切りで 0100, 1010)
・8bit長の符号なし10進数 74 を渡す(2の6乗+2の3乗+2の1乗)
・8bit長の符号あり10進数 74 を渡す(先頭の符号bitが0なら正の数)
・文字 'J' を渡す(ASCIIコード表の 0x4A)
・8つの画素が [消灯, 点灯, 消灯, 消灯, 点灯, 消灯, 点灯, 消灯] であることを表したByte型の画像データを渡す
等々、
上記において、渡されるデータはすべて同じで 01001010 です。
そのままでは何の意味も持たない単なるbit列に対して「このような意味を持つデータだと規定する」と解釈に制限をかける仕組みが「データ型」です。
整数型、浮動小数点型、文字型、参照型(ポインタ)、画像型、等々ありますが、すべて渡されているのはbit列です。
また、[off, on, off, off, on, off, on, off] というbit列の状態をこのように長々と書くのはメンドウなので、これを数値で表記したのがN進数表記です。
8進数の 112、16進数の 4A、10進数の 74、等々ありますが、すべて渡されているのは 2進数の 01001010 です。
----
サンプル問題 科目B 問16
https://www.fe-siken.com/kakomon/sample/b16.html
> 引数として、●(10)や●(8)の整数値が渡されるものとするとされていた場合でも、
> 引数は2進数としてプログラムを読み進めればいいのでしょうか?
はい、その通りです。
この問題におけるデータ型「整数型」は「16bit長で符号なし整数を格納する」という制限をかけています。
整数を10進数で表記しようとするのは私たちが小学校からそれに慣れ親しんでいるからであり、その同じ整数を 2進数でも 8進数でも 16進数でも表記できます。必要に応じてどのようにも解釈できます。
> 2進数であっても16進数であっても、人間がわかりやすくするためのひとつの表現方法にすぎません。(No.2)
2025.06.07 21:39
jjon-comさん(No.6)
★FE プラチナマイスター
> 今回は、16進数なのでA~Fは整数型では扱えないことは分かったのですが、まだモヤモヤしております…
いいえ、16進数は整数です。整数は16進数で表現できます。
> 引数として、●(10)や●(8)の整数値が渡されるものとするとされていた場合
プログラミングにおいては「整数型」のデータが渡される、という制限しかありません。
コンピュータにとってすべてのデータはbit列であり、コンピュータはそれが何進数か知りません。
ですから、10進数しか渡せない、8進数しか渡せない、16進数しか渡せない、ということはありません。
すべて同じbit列 01001010 に対する、人間の都合による表現の違いでしかありません。
上記が分かりづらいようなら、(現段階では)以下は無視した方がよいと思いますが。
文字型のデータ3つ('1','1','2')を渡してそれを1バイトの整数型データ 74(10進数表現)に変換する、とか、
文字型のデータ2つ('4','A')を渡してそれを1バイトの整数型データ 74(10進数表現)に変換する、など。
8進数と見なした/16進数と見なした「文字列を渡す」というのなら話は別になります。
2025.06.07 22:43
わんわんさん(No.7)
> jjon-comさん
非常に丁寧に解説いただき、ありがとうございます。
冒頭の具体例が非常に分かりやすかったです!
「コンピュータが扱える数は2進数のbit列」この基本を忘れていました!
このbit列を人間が分かりやすい表現方法にしたものが8進数や16進数という訳ですね!
> 2進数であっても16進数であっても、人間がわかりやすくするためのひとつの表現方法にすぎません。(No.2)
だから、人間からコンピュータに渡すということは、n進数→2進数で渡すということ!
但し、文字列型で渡すと、文字として認識されるということですね?
プログラムを読み進める以前の誤認、とても助かりました。
皆さま、ありがとうございました。
2025.06.08 00:09
