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.4k
コンピュータと数学
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
140
ハフマン木の作成
shoyan
0
12k
PHPコーディング規約とサポートするツール
shoyan
2
3.4k
暗号技術を支える素数
shoyan
2
2.8k
Other Decks in Programming
See All in Programming
Site Reliability Engineering for GMO
pyama86
6
940
Milestoner
bkuhlmann
1
400
FigmaとPHPで作る1ミリたりとも表示崩れしない最強の帳票印刷ソリューション
ttskch
39
18k
受託開発でGitLab CI を活用していく
xiombatsg
1
270
Zero Waste, Radical Magic, and Italian Graft – Quarkus Efficiency Secrets
hollycummins
0
220
Semantic search with Django and pgvector
pauloxnet
0
240
脱・初心者!脱・マネコン!AWS CDKを使ってみませんか!?
har1101
0
300
ログラスを支える設計標準について / loglass-design-standards
urmot
10
2.1k
GitHub Actionsで泣かないためにやっておきたい設定 / Recommended GHA settings to avoid crying
pinkumohikan
3
490
元気予報
suu_mire0726
0
860
DMMプラットフォームがTiDB Cloudを採用した背景
pospome
8
3.6k
Designing for tomorrow's programming workflows
honnibal
PRO
2
110
Featured
See All Featured
Building an army of robots
kneath
300
41k
Statistics for Hackers
jakevdp
789
220k
Building Applications with DynamoDB
mza
88
5.6k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
From Idea to $5000 a Month in 5 Months
shpigford
377
45k
Reflections from 52 weeks, 52 projects
jeffersonlam
344
19k
Navigating Team Friction
lara
177
13k
KATA
mclloyd
14
12k
Building Better People: How to give real-time feedback that sticks.
wjessup
354
18k
GraphQLとの向き合い方2022年版
quramy
31
12k
The Language of Interfaces
destraynor
151
23k
Code Review Best Practice
trishagee
54
15k
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/
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠