# Chapter2-2 「シフト演算と、2進数のかけ算わり算」 ## 4/4(日) ###### tags:`基本情報技術` さつき #### シフト演算 * 2進数をあらわすビット列を、左もしくは右にずらす操作。 * 10進数であれば*10、/10。2進数であれば*2、/2。 * オーバーフロー!めっちゃ聞くやつ!!問題点↓ * [オーバーフロー](https://wa3.i-3-i.info/word1199.html#:~:text=%E3%81%93%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%E7%8A%B6%E6%85%8B%E3%81%8C,%E3%81%82%E3%81%B5%E3%82%8C%E3%80%8D%E3%81%A8%E3%82%82%E8%A8%80%E3%82%8F%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82) * 想定している量よりも溢れてしまった状態 * 「バッファオーバーフロー」を略してオーバーフローという場合もある。意味は似たようなもの * 掛け算なら、2のn乗の足し算を使う。7倍の場合、2の2乗+2の1乗+2の0乗。 * 割り算なら、引き算を使う。 * わり算急にむずない?一旦とばして過去問する。 2進数に慣れてないからかな。 #### 過去問 * 問1 * 1101000を右に2ビット算術シフト * 算術シフトは符号を考慮して行う。 * 空いたビットを何で埋めるかに注意する。→先頭の符号ビットで埋める。 * →11110100 * 00010100から減じた値(負の数は2の補数表現によるものとする) * 00010100から減じた値を求めるには、11110100をマイナスにしたものを足せばよい。発想が難しい。 * 11110100の2の補数をとる * 復習:2進数では「1の補数」と「2の補数」という2つの補数を使う。 * 2の補数とは、「足すと桁あがりする数」のこと。 * __ある数値に対する2の補数表現は、そのままその数値の負の値として使える。 →コンピュータは負の数を表すのに、2の補数を使う。__ * __2の補数は、全ビット反転して、1を足す__ * 11110100を全ビット反転すると、00001100 * これに1を足すと、00001100 これが負の数。これを足す! * 00010100 + 00001100 = 00100000 * うーん。。。 ちさと * シフト演算 * 2進数(ビットの並び)を左右にずらして掛け算や割り算をする * 00101100が44という計算が理解できてなかった。。 * 32(2の5乗)+8(2の3乗)+4(2の2乗)ということか * 左にずらす(101100)→(10110000)→128+32+16=176 * ずらした時に、はみ出る数字が0ではなく1だったら、ビット数で表せる範囲を超える事になる(オーバーフロー) * 算術シフト * 先頭の符号を固定 * わり算muzui。。 * 15 / 3 → 1111 / 11 * 1111から11が何回引けるか * ??? * 過去問やって理解できた未来の自分に期待 * 過去問 * 11010000を2ビット算術シフトする→末尾の0
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up