ガジェット通信 GetNews

見たことのないものを見に行こう
  • 北野武からの出演オファーに「役者やってて良かった」 『アウトレイジ 最終章』池内博之インタビュー
  • 不潔で下劣な男に挑んだ阿部サダヲ「珍しく自分の写真を撮ったほど、別人になりきれた」
  • 『ブレードランナー 2049』ハリソン・フォードインタビュー「仕事は好きなんだ。役に立ちたい。チャレンジが好き」
  • 『ブレードランナー 2049』“ジョイ”と“ラヴ”にインタビュー「SF映画は女子が観ちゃだめ? そんなわけないわ!」
  • 戸次重幸が「理解出来ないほどの悪い役」に挑む実話をベースにした物語『神と人との間』
  • コムアイ(水曜日のカンパネラ)インタビュー「お風呂に入った猫がシュッと細くなってしまうところが情けなくて愛しい」
  • 『マイティ・ソー バトルロイヤル』女戦士・ヴァルキリーを熱演! 声優・沢城みゆき「ロキ様ファンの方お友達になってください!」
  • 『ハン・ソロ/スター・ウォーズ・ストーリー』で大大活躍中! チューバッカさん直撃インタビュー:動画  
  • 『斉木楠雄のΨ難』インタビュー 佐藤二朗「橋本環奈が高校にいたら可愛すぎて男子は正気を保てないでしょ」
  • 性別や年代によって楽しみ方が変わる映画『妻ふり』 榮倉奈々&安田顕インタビュー
  • 『パシフィック・リム:アップライジング』監督&ジョン・ボイエガに「ぼくのかんがえたさいきょうのかいじゅう」を見てもらった!
  • キアヌ・リーヴスに“仕事の流儀”を聞いてきた! 『ジョン・ウィック:チャプター2』が本日公開
  • 窪塚洋介が明かす未体験への挑戦と驚き 映画『沈黙-サイレンス-』でハリウッドデビューを飾る
  • 『スーサイド・スクワッド』のダイバーシティを担う二人に直撃 「人間関係を構築するのに必要なこと教えよう」
  • 柄本佑が前田敦子を絶賛「“僕のあっちゃん、私のあっちゃん”にしたくなる魅力がある」
  • 北原里英が映画主演で後輩に見せる“道”「AKB48が夢の通過点では無くゴールになっているからこそ」

体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

【謎解きプログラム】どんな数字になる?【整数のキャスト】

【謎解きプログラム】どんな数字になる?【整数のキャスト】

本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。

それでは以下、各問題とその解答を見ていきましょう。

問題のオープニング

ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。

「24時間以内に謎が解けない場合は、このPCのデータは消失する。

 謎は、あなたが真のプログラマーなら解けるものだ」

これは挑戦状ではなく脅迫状だ!

そこには、見たことのない謎が掲載されていた。

あなたは歴戦のプログラマーとして、データを救うために、この謎に挑むことになった。

問題1

あるビット数の符号付整数から、別のビット数の符号付整数への変換(キャスト)を示されました。

下記の選択肢のうち、変換結果として正しい物を選んで下さい。

// 問題のパズル
int型(符号付整数) 32bit(4byte):128

変換

byte型(符号付整数) 8bit(1byte):?

// 選択肢
128
-128
0
-1

32bit符号付整数の128を、2進数で表すと「0000 0000 0000 0000 0000 0000 1000 0000」になります。

この数値を8bitに変換すると、下8桁を取り出して「1000 0000」になります。

符号付整数の場合、一番左の桁は符号になります。ここでは、1なのでマイナスです。

マイナスの値は、-1が「1111 1111」、-2が「1111 1110」、-3が「1111 1101」と変化していきます。そして、「1000 0000」で-128になります。

(8bit符号付整数は、127~0、-1~-128を合わせた、127~-128の範囲になります)

というわけで、2番目の選択肢『-128』が答えになります。

以下、Coding SandboxのJava8で実行確認できるコードを掲載しておきます。

// サンプルコード
class Main {
public static void main(String[]args) {
int i = 128;
byte b = (byte)i;
System.out.println(“b = ” + b);
// b = -128
}
}

// 出力
b = -128

問題2

あるビット数の符号付整数から、別のビット数の符号付整数への変換(キャスト)を示されました。

下記の選択肢のうち、変換結果として正しい物を選んで下さい。

// 問題のパズル
int型(符号付整数) 32bit(4byte):-128

変換

byte型(符号付整数) 8bit(1byte):?

// 選択肢
128
-128
127
-127

32bit符号付整数の-128を、2進数で表すと「1111 1111 1111 1111 1111 1111 1000 0000」になります。

この数値を8bitに変換すると、下8桁を取り出して「1000 0000」になります。

これは1問目の値と同じです。

というわけで、2番目の選択肢『-128』が答えになります。

以下、Coding SandboxのJava8で実行確認できるコードを掲載しておきます。

// サンプルコード
class Main {
public static void main(String[]args) {
int i = -128;
byte b = (byte)i;
System.out.println(“b = ” + b);
// b = -128
}
}

// 出力
b = -128

問題3

あるビット数の符号付整数から、別のビット数の符号付整数への変換(キャスト)を示されました。

下記の選択肢のうち、変換結果として正しい物を選んで下さい。

// 問題のパズル
int型(符号付整数) 32bit(4byte):256

変換

byte型(符号付整数) 8bit(1byte):?

// 選択肢
-128
-1
0
127

32bit符号付整数の256を、2進数で表すと「0000 0000 0000 0000 0000 0001 0000 0000」になります。

この数値を8bitに変換すると、下8桁を取り出して「0000 0000」になります。

なので0になります。

というわけで、3番目の選択肢『0』が答えになります。

以下、Coding SandboxのJava8で実行確認できるコードを掲載しておきます。

// サンプルコード
class Main {
public static void main(String[]args) {
int i = 256;
byte b = (byte)i;
System.out.println(“b = ” + b);
// b = 0
}
}

// 出力
b = 0

CodeIQ運営事務局より

柳井さん、ありがとうございました!
現在、柳井さんの最新問題が出題中です。
ぜひ挑戦してみてくださいね!

CodeIQ MAGAZINEの記事一覧をみる
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。