駅の電光掲示板「32768両編成」の原因について一考
ちなみに問題文に載せられた画像は多分これ(問題用紙に直接回答して提出するタイプだったから手元にない) pic.twitter.com/i2JCH90CwA
2014-08-03 12:12:49憶測に憶測を重ねてるからなんとも言えないけど、こんな感じだと納得できる。 1.入力する側のプログラムは、両数を記憶するのにshort型を使っている。 2.混乱していて次に何両編成の電車が来るか分からないから、とりあえず両数に「-」と入力しておいた。
2014-08-03 11:33:183.入力側プログラムは「-」という入力を「-0」(10進数)だと捉え、先頭の符号記憶ビットに1を、残りの数値記憶ビットに000000000000000を、結局全体として「1000000000000000」(2進数)という値を記憶した。
2014-08-03 11:40:574.「1000000000000000」(2進数)というデータが出力側に送られる。 5.出力する側のプログラムは、両数を記憶するのにint型を使っている。
2014-08-03 11:45:206.送られてきたshort型の「1000000000000000」(2進数)というデータを、int型の「00000000000000001000000000000000」(2進数)というデータに変換した。これは、int型ではちょうど2^15=「32768」(10進数)を表す。
2014-08-03 11:48:54職員「運用乱れて両数不明だから"-両編成"って出しとけばいいか」→「-」と入力→入力を受け付けたプログラム「"-"ってことは"-0"か。マイナスは頭のビットを1にすればいいんだよね。"1000000000000000"と」→続く — Shun1さん (@Nukashi_ALL)
2014-08-03 11:53:40→表示機のプログラム「マイナスxx両なんてありえないから俺は16ビットを正の数として読み込むぜ。"1000000000000000"ってことは十進数に直すと32768だな。わかった。"32768両編成"って出すぜ」 — Shun1さん (@Nukashi_ALL)
2014-08-03 11:54:08