Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
コンピュータと数学
Search
Shohei Yamasaki
November 07, 2015
Programming
0
1.5k
コンピュータと数学
2015/11/6 プログラマのための数学勉強会@福岡#2で発表したスライドです。
目次
* 位取り基数法
* 基数変換
* データの表現方法
* コンピュータが行う演算
Shohei Yamasaki
November 07, 2015
Tweet
Share
More Decks by Shohei Yamasaki
See All by Shohei Yamasaki
AMPで爆速WEBサイト
shoyan
0
160
ハフマン木の作成
shoyan
0
14k
PHPコーディング規約とサポートするツール
shoyan
2
3.4k
暗号技術を支える素数
shoyan
2
3k
Other Decks in Programming
See All in Programming
開発者とQAの越境で自動テストが増える開発プロセスを実現する
92thunder
1
180
KubeCon + CloudNativeCon NA 2024 Overviewat Kubernetes Meetup Tokyo #68 / amsy810_k8sjp68
masayaaoyama
0
250
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
선언형 UI에서의 상태관리
l2hyunwoo
0
140
Refactor your code - refactor yourself
xosofox
1
260
短期間での新規プロダクト開発における「コスパの良い」Goのテスト戦略」 / kamakura.go
n3xem
2
160
SymfonyCon Vienna 2025: Twig, still relevant in 2025?
fabpot
3
1.2k
rails statsで大解剖 🔍 “B/43流” のRailsの育て方を歴史とともに振り返ります
shoheimitani
2
930
Full stack testing :: basic to basic
up1
1
930
今からはじめるAndroidアプリ開発 2024 / DevFest 2024
star_zero
0
1k
Discord Bot with AI -for English learners-
xin9le
1
120
これが俺の”自分戦略” プロセスを楽しんでいこう! - Developers CAREER Boost 2024
niftycorp
PRO
0
190
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.3k
Building Applications with DynamoDB
mza
91
6.1k
GitHub's CSS Performance
jonrohan
1030
460k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Bash Introduction
62gerente
608
210k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Why Our Code Smells
bkeepers
PRO
335
57k
Producing Creativity
orderedlist
PRO
341
39k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
Building Adaptive Systems
keathley
38
2.3k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Transcript
コンピュータと数学 プログラマのための数学勉強会@福岡#2 2015.11.06 @shoyan
4IPIFJ:BNBTBLJ !TIPZBO • プログラマー (週末は農夫) • 2児の⽗父 •
GMOペパボ
࣍ • 位取り基数法 • 基数変換 • データの表現⽅方法
• コンピュータが⾏行行う演算
ͱ͍͍ͬͨͳΜͰ͠ΐ͏ʁ • 「ひゃくじゅう」 • 2進数の「いち、いち、ぜろ」で「6」 • 警察呼ぶ番号
ͲΕਖ਼ղͰ͢
༩͑ΒΕͨใΛͲ͏ѻ͏͔ʹΑͬ ͯղऍ͕มΘΓ·͢
ਓؒͱίϯϐϡʔλͷҧ͍
ਓؒ ⼈人間は数値や⽂文字、画像、⾳音楽などを別のもの として扱う
ίϯϐϡʔλ コンピュータは数値や⽂文字、画像、⾳音楽などを 「0」と「1」に置き換える
ਐ • 「0」と「1」しか使わない。「2」になった ら位があがる • 例例えば12は 「1110」 •
コンピュータにとって扱いやすい • 英語でバイナリ(binary)と呼ぶ
ਐ • 私たちにとって最も馴染み深い • ⼈人間の指は10本あるので10進数が使われる • ⼈人間にとって扱いやすい
ҐऔΓه๏ • 決められた種類の数字を使って、その数字を 各桁に配置して数を表す⽅方法 • 2進法 • 10進法
• 16進法
ਓؒͱίϯϐϡʔλͷڮ͠ • コンピュータは「0」と「1」しか扱えない • ⼈人間は10進法が得意(2進法?なにそれ、お いしいの?) • 変換が必要
جม
جม • 表記されている数値を別の位取り基数法に変 換すること • 2進法→10進法 • 10進法→2進法
ܻͷ࣋ͭҙຯ 10進数の「1532」という値。 1000が1つ 100が5つ 10が3つ 1が2つ これらを全部⾜足したもの。1000や100、10や1は各
桁に意味を持たせている重要な値で重みと呼ぶ
Λࣜʹ͢Δͱ (1000 × 1) + (100 × 5) + (10
× 3) + (1 × 2) = (10×10×10×1) + (10×10×5) + (10×3)+(1×2) = (10 × 1) + (10 × 5) + (10 × 3) + (10 × 2) 3 2 1 0
Λࣜʹ͢Δͱ • ͯ͢ͷܻͷॏΈ͕ʮ10ͷnʯͰද͞ΕΔ • ܻ͕܁Γ্͕Δ͝ͱʹॏΈͷେ͖͘ͳΔ
ج • ॏΈͷجຊʹͳΔΛجɺ·ͨఈʢ͍ͯʣ ͱݺͿ • 10進数なら基数は10 • 2進数なら基数は2
ਐ͔Βਐม͢Δ • mਐ๏ͷʮmʯ͕جʹͳΔ • ֤ܻͷॏΈʮmͷnʯͱͳΓɺnӈͷܻ ͔Βॱʹ0, 1, 2, 3 …
ͱͳΔ
ਐ͔Βਐม͢Δ 2進数「10100」という値を10進数に変換 (2 × 1) + (2 × 0)
+ (2 × 1) + (2 × 0) + (2 × 0) = (16×1) + (8×0) + (4×1) + (2×0) + (1×0) = 16 + 0 + 4 + 0 + 0 = 20 4 3 2 1 0
ਐ͔Βਐม • 10進数「1530」を 2進数に変換 • その前に ちょっとした⼩小話をします
ਐ͔Βਐม 「1530」を基数10で割ってみると 1530 ÷ 10 = 153 … 0
153 ÷ 10 = 15 … 3 15 ÷ 10 = 1 … 5 1 ÷ 10 = 0 … 1
ਐ͔Βਐม 基数で繰り返して割り算したときの余りが 「1530」なのです。 このことを⽇日本⼈人は昔から知っていました。
ຊޠ େݴ༿ w IUUQTKBXJLJQFEJBPSHXJLJ&%&#&# ⽇日本語では「あまり」と して呼ばれている
ਐ͔Βਐม • もとの値を2進法の基数である「2」で割り算する • その商を再び「2」で割り算する • 商が0になるまで繰り返す
ਐ͔Βਐม 10進数の「20」を2進数に変換すると 20 ÷ 2 = 10 … 0
10 ÷ 2 = 5 … 0 5 ÷ 2 = 2 … 1 2 ÷ 2 = 1 … 0 1 ÷ 2 = 0 … 1 「10101」になる
Ҏ֎ͷද͠ํ
Ҏ֎ͷจࣈͷද͠ํ • コンピュータの世界では⽂文字や写真なども 「0」と「1」で表現します
จࣈ • ⽂文字コード表を使って、その⽂文字に対応する コードを8桁(1バイト)の2進数に置き換え て表現している
"4$**ίʔυ
"4$**ίʔυ • 例例えば「A」であれば、⽂文字コードは「65」 • 基数変換して2進数にすると「01000001」
จࣈίʔυ • ASCIIコード以外に、⽂文字を2バイトで扱う、 JISコードやシフトJISコード、EUCコード、 Unicodeなどがある • ⽂文字化けは⽂文字を記録するときに使った⽂文字 コード表とそれを解釈するための⽂文字コード 表が異異なるときに起こる
จࣈίʔυ • ⽂文字コード表によって数値データに変換され た⽂文字は⾯面⽩白い使い⽅方ができる • ⽂文字コード表のAは「65」、aは「97」 • 32を⾜足すと、⼤大⽂文字→⼩小⽂文字に変換できる
৭ • コンピュータは画像データを⼩小さな点の並び として扱う • この点をピクセル(pixel)と呼び、各ピクセル の⾊色情報を数値にして画像を記録している
৭ • コンピュータ上に表⽰示される⾊色は、⾚赤と緑、 ⻘青の3⾊色の光の組み合わせでできている • ⾚赤と緑を混ぜると⻩黄⾊色、⾚赤と⻘青を混ぜると紫 になる •
⾊色を混ぜるには光の強さで調節する
৭ • 光の強さは0 〜~ 255の範囲で指定する • 0はまったく発光していない状態 •
255はいちばん強い光
৭ ৭ ͷڧ͞ ͷڧ͞ ੨ͷڧ͞ ࠇ
੨ ԫ ࢵ ਫ৭ ന
৭ • 0 〜~ 255は2進数の8桁(8ビット)で表現でき る • ⾚赤、緑、⻘青にそれぞれ8ビットずつ使って1ピ クセルの⾊色を表現する
• この⽅方式を24ビットカラーと呼ぶ
ίϯϐϡʔλʹͰ͖Δ͜ͱ
ίϯϐϡʔλʹͰ͖Δ͜ͱ ೖྗ ԋࢉ ग़ྗ ใΛड͚औͬͯɺԋࢉͯ͠ɺ݁ՌΛग़ྗ͢Δ͜ͱ ͜ͷ͔ͭ͠Ͱ͖ͳ͍
ԋࢉ コンピュータが⾏行行う演算には、その内容ごとに呼び 名が付けられている w ࢉज़ԋࢉ w γϑτԋࢉ w Ϗοτԋࢉ w
ؔԋࢉ w ཧԋࢉ
ࢉज़ԋࢉ 数値データを使って四則演算(⾜足し算、引き 算、掛け算、割り算)を⾏行行うこと
ࢉज़ԋࢉ ࢉज़ԋࢉࢠ ҙຯ ͠ࢉ Ҿ͖ࢉ ֻ͚ࢉ ׂΓࢉ
γϑτԋࢉ • シフト演算とは2進数のビットパターンを右ま たは左にずらす演算である • 掛け算、割り算と同じ結果を得ることができ る
γϑτԋࢉ コンピュータの演算では以下の2通りのシフト演 算がある • ཧγϑτʢର: ූ߸ͳ͠σʔλʣ • ࢉज़γϑτʢର: ූ߸͖σʔλʣ
γϑτԋࢉ わかりやすくするために10進数で説明します もとの数値 左に1桁移動 左に3桁移動
γϑτԋࢉ • 左に1つ移動すれば10倍される • 左に1つ移動すれば • これを2進数で⾏行行う
1 10 倍される
ཧγϑτ • 2ਐΛࠨʹSϏοτγϑτ͢Δͱɺ2 ഒ͢Δ ͜ͱʹ૬͢Δ s kccn.konan-‐‑‒u.ac.jp/information/cs/cyber03/cy3_̲shc.htm
ཧγϑτ • 2ਐΛӈʹSϏοτγϑτ͢Δͱɺ2 ഒ͢Δ ͜ͱʢ2 ͰׂΔ͜ͱʣʹ૬͢Δ s -‐‑‒s kccn.konan-‐‑‒u.ac.jp/information/cs/cyber03/cy3_̲shc.htm
ࢉज़γϑτ • 負の数でも掛け算や割り算ができる • 符号付き 2進数を左にSビット算術シフトする と、2 倍することに相当する
kccn.konan-‐‑‒u.ac.jp/information/cs/cyber03/cy3_̲shc.htm s
ࢉज़γϑτ • 符号付き2進数を右にSビット算術シフトする と、2 倍すること(2 で割ること)に相当 http://kccn.konan-‐‑‒u.ac.jp/information/cs/cyber03/cy3_̲shc.htm
-‐‑‒s s
Ϗοτԋࢉ • 2進数のビットを使った演算 • 特定の桁が1かどうかを調べたり、指定した桁 の値だけを取り出したりするときに使う
৭ͷΛऔΓग़͢
⾚赤 緑 ⻘青 ⻘青の成分が欲しい時は、右側の8ビットを1、他を 0としてAND演算を⾏行行う 11111111 11011100 00011001 00000000 00000000 11111111 AND ) 00000000 00000000 00011001
৭ͷΛऔΓग़͢ • 緑の成分を取り出したいときは、同じように 緑の成分の部分のビットを1にして AND演算 する。 • 演算結果を8ビット論論理理右シフトする
ϚεΫ • コンピュータの世界では、「マスクをかけ る」と表現することがある • マスクをかけるとは「0と1のビットの並びに 覆いを被せて、必要な箇所だけ取り出す」こ と
ؔԋࢉ • 2つの値を⽐比較してその関係が正しいか、正し くないかを調べるための演算 • ⽐比較演算とも呼ばれる
ؔԋࢉ ؔԋࢉࢠ ҙຯ ͍͠ ͘͠ͳ͍ ΑΓେ͖͍
ΑΓখ͍͞ Ҏ্ ҎԼ
ཧԋࢉ • 与えられた命題が正しいか正しくないかを判 断する演算 • 論論理理演算が取り扱うデータは真(True)、偽 (False)のみ •
命題とは「正しい」か「正しくない」かを判 断できる⽂文のこと
ཧੵ "/%ԋࢉ 「変数aの値が0以上である」かつ「変数aの値 が100以下」である というように関係演算を複数組み合わせて使う
ཧ 03ԋࢉ 「変数aの値がʼ’Aʼ’と等しい」または「変数aの値 がʼ’aʼ’と等しい」である どちらかの条件がTrueであればTrue
ຊͷհ • ⽂文系プログラマーの数学知識識 基礎の基礎 • http://www.amazon.co.jp/dp/ 4774139947
ຊͷհʢʣ • The Zombie Book • 電⼦子書籍を配布しています(私が執筆しまし た。数学とは関係ないです)。 •
http://balloonbros.cc/zombie-book/
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠