---
# System prepended metadata

title: Chapter2-2　「シフト演算と、2進数のかけ算わり算」
tags: [基本情報技術]

---

# 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進数に慣れてないからかな。
#### 過去問
* 問１ 
    * 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