離散数学(全109問中36問目)
No.36解説へ
8ビットの2進数11010000を右に2ビット算術シフトしたものを,00010100から減じた値はどれか。ここで,負の数は2の補数表現によるものとする。
出典:平成24年秋期 問 1
- 00001000
- 00011111
- 00100000
- 11100000
広告
解説
シフト演算には、「論理シフト」と「算術シフト」があります。
11010000→11110100
2の補数で表現されている11110100の絶対値を求めるには、再度ビット列を反転して1を加える操作を行えばいいので、
11110100→00001011→00001100
23+22=8+4=12
値は負数なので2進数11110100は10進数で「-12」ということになります。
同様に演算対象となっている2進数00010100は10進数で「20」になります。
24+22=16+4=20
これら2つの10進数を使って減算を行うと、
20-(-12)=32
10進数32を2進数で表すと、
32=25=00100000
になります。
- 論理シフト
- 符号ビットを含めてすべてのビットを左右のいずれかにずらし、空いたビットには0をセットする。
- 算術シフト
- 符号ビットを除外したビット列を左右のいずれかにずらし、左シフトであれば空いたビットには0,右シフトであれば空いたビットには符号ビットと同じビットをセットする。
11010000→11110100
2の補数で表現されている11110100の絶対値を求めるには、再度ビット列を反転して1を加える操作を行えばいいので、
11110100→00001011→00001100
23+22=8+4=12
値は負数なので2進数11110100は10進数で「-12」ということになります。
同様に演算対象となっている2進数00010100は10進数で「20」になります。
24+22=16+4=20
これら2つの10進数を使って減算を行うと、
20-(-12)=32
10進数32を2進数で表すと、
32=25=00100000
になります。
広告