CodeIQ MAGAZINECodeIQ MAGAZINE

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

2017.05.19 Category:CodeIQ問題解説・リーダーボード Tag:

  • 3
  • このエントリーをはてなブックマークに追加

言語不問で、プログラムにちなんだ謎を解く「謎解きプログラム」。

あなたは見事、謎を解けましたか? というわけで、出題者の柳井さんによる解答と解説をどうぞ!
by CodeIQ運営事務局

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

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

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

問題のオープニング

ある日、出社すると、あなたの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運営事務局より

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

  • 3
  • このエントリーをはてなブックマークに追加

■関連記事

【謎解きプログラム】どう防ぐ?【無限ループ】解答と解説... 【謎解きプログラム】どう防ぐ?【無限ループ】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間以内に謎...
数学の問題をプログラミングで解こう!「タワー・ビルディング」問題解説... 問題のおさらい A を一辺が 1 の立方体のブロックとし、B を縦が 1、横が 1、高さが 2 の直方体のブロックとします。 (下は横から見た図です。) 自然数 n, a, b に対し、A を最大 a 個、B を最大 b 個使って、縦が 1、横が 1、高さが n の直方体の塔を作ります。 こ...
【謎解きプログラム】正しいコードは?【一人すごろく】解答と解説... 【謎解きプログラム】正しいコードは?【一人すごろく】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間...
数学の問題をプログラミングで解こう!「ペア・ドロップ」問題解説... 問題のおさらい n を自然数とします。1 から n までの自然数が 1 つずつ書かれた n 枚のカードが 2 組あります。 これら 2n 枚のカードをよく混ぜ、A と B の 2 人に n 枚ずつ配ります。 A と B は、それぞれ自分の持ち札の中に番号が一致するカードがあればその 2 枚を捨...
【謎解きプログラム】中身はどうなる?【出し入れ】解答と解説... 【謎解きプログラム】中身はどうなる?【出し入れ】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間以内...
【謎解きプログラム】座標の移動【Matrix】解答と解説... 【謎解きプログラム】座標の移動【Matrix】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間以内に...

今週のPickUPレポート

新着記事

週間ランキング

CodeIQとは

CodeIQ(コードアイキュー)とは、自分の実力を知りたいITエンジニア向けの、実務スキル評価サービスです。

CodeIQご利用にあたって
関連サイト
codeiq

リクルートグループサイトへ