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.6k
コンピュータと数学
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
180
ハフマン木の作成
shoyan
0
14k
PHPコーディング規約とサポートするツール
shoyan
2
3.5k
暗号技術を支える素数
shoyan
2
3.1k
Other Decks in Programming
See All in Programming
コードとあなたと私の距離 / The Distance Between Code, You, and I
hiro_y
0
210
SODA - FACT BOOK(JP)
sodainc
1
9k
Dive into Triton Internals
appleparan
0
310
Introducing RemoteCompose: break your UI out of the app sandbox.
camaelon
2
160
Inside of Swift Export
giginet
PRO
1
250
AI Agent 時代的開發者生存指南
eddie
4
2.2k
バッチ処理を「状態の記録」から「事実の記録」へ
panda728
PRO
0
210
React Nativeならぬ"Vue Native"が実現するかも?_新世代マルチプラットフォーム開発フレームワークのLynxとLynxのVue.js対応を追ってみよう_Vue Lynx
yut0naga1_fa
2
1.9k
はじめてのDSPy - 言語モデルを『プロンプト』ではなく『プログラミング』するための仕組み
masahiro_nishimi
4
17k
AkarengaLT vol.38
hashimoto_kei
1
130
NixOS + Kubernetesで構築する自宅サーバーのすべて
ichi_h3
0
1.3k
Temporal Knowledge Graphで作る! 時間変化するナレッジを扱うAI Agentの世界
po3rin
5
1.1k
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Visualization
eitanlees
150
16k
Stop Working from a Prison Cell
hatefulcrawdad
272
21k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Speed Design
sergeychernyshev
32
1.2k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.2k
Building a Scalable Design System with Sketch
lauravandoore
463
33k
Git: the NoSQL Database
bkeepers
PRO
431
66k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
The Language of Interfaces
destraynor
162
25k
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/
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠