離散数学(全64問中31問目)
No.31解説へ
xは,0以上65,536未満の整数である。xを16ビットの2進数で表現して上位8ビットと下位8ビットを入れ替える。得られたビット列を2進数とみなしたとき,その値をxを用いた式で表したものはどれか。ここで,a div b はaをbで割った商の整数部分を,a mod b はaをbで割った余りを表す。また,式の中の数値は10進法で表している。
出典:平成23年秋期 問 1
- (x div 256)+(x mod 256)
- (x div 256)+(x mod 256)×256
- (x div 256)×256+(x mod 256)
- (x div 256)×256+(x mod 256)×256
広告
解説
仮に用意した16ビットの2進数"11110000 00001111"の上位ビット8ビットと下位8ビットを入れ替えると、以下のようになります。
11110000 00001111 → 00001111 11110000
入れ替え後の下位8ビットは、入れ替え前の上位8ビットを、右へ8ビット分シフトすることで得ることができます。2進数は、右に1ビットシフトするごとに値が1/2倍になる性質がありますから、右へ8ビット分シフトした値は、元の値を「div 28 → div 256」することで表現できます。
11110000 00001111 div 256=00000000 11110000
さらに入れ替え後の上位8ビットは、入れ替え前の下位8ビットを、左へ8ビットシフトすることで得ることができます。xの下位8ビットは、xを256で割った余りと同じです。2進数は、左に1ビットシフトするごとに値が2倍になる性質がありますから、左へ8ビット分シフトした値は、下位8ビットの値を「×28 → ×256」することで表現できます。
11110000 00001111 mod 256=00000000 00001111
00000000 00001111×256=00001111 00000000
入れ替え後のビット列は下位8ビットの値「x div 256」と上位8ビットの値「(x mod 256)×256」を足し合わせたものであるため、入れ替え後の整数をxを用いて表した式は、
(x div 256)+(x mod 256)×256
したがって「イ」が正解です。
11110000 00001111 → 00001111 11110000
入れ替え後の下位8ビットは、入れ替え前の上位8ビットを、右へ8ビット分シフトすることで得ることができます。2進数は、右に1ビットシフトするごとに値が1/2倍になる性質がありますから、右へ8ビット分シフトした値は、元の値を「div 28 → div 256」することで表現できます。
11110000 00001111 div 256=00000000 11110000
さらに入れ替え後の上位8ビットは、入れ替え前の下位8ビットを、左へ8ビットシフトすることで得ることができます。xの下位8ビットは、xを256で割った余りと同じです。2進数は、左に1ビットシフトするごとに値が2倍になる性質がありますから、左へ8ビット分シフトした値は、下位8ビットの値を「×28 → ×256」することで表現できます。
11110000 00001111 mod 256=00000000 00001111
00000000 00001111×256=00001111 00000000
入れ替え後のビット列は下位8ビットの値「x div 256」と上位8ビットの値「(x mod 256)×256」を足し合わせたものであるため、入れ替え後の整数をxを用いて表した式は、
(x div 256)+(x mod 256)×256
したがって「イ」が正解です。
広告