SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
東北大学 工学部 機械知能・航空工学科
2018年度 クラスC3 D1 D2 D3
情報科学基礎 I
大学院情報科学研究科
鏡 慎吾
http://www.ic.is.tohoku.ac.jp/~swk/lecture/
3. 数の表現 ― 符号つき整数
(教科書1.2節)
+ 実数の表現 (教科書1.3節)
2鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
負の数の表現
素朴な方法 (符号と絶対値法)
通常我々は,10進数の絶対値の前に – をつけて負の数を表す.
同様に,最上位ビットで符号を表し,残りで絶対値を表せばよい
10111011
符号ビット:
0: 正
1: 負
絶対値
問題点:
•ゼロの表現が2通り存在する
•加減算が煩雑になる
→ 通常は,2の補数表示と呼ばれる方式が用いられる
3鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
「2の補数」表現による符号つき数
111 7
110 6
101 5
100 4
011 3
010 2
001 1
000 0
3ビットの場合:
2進のビット列 符号なし数
-1
-2
-3
-4
3
2
1
0
2の補数表現による符号つき数
000から1ずつ減らして行ったと
きの表現を素直に考えるとよい
• 一般にnビットの場合,
– 2n-1 ~ (2n-1 – 1)
の範囲の数を表せる
• MSBが1であれば,負
の数である
C言語では,各種の整数型に符号
なし,符号つきの種類がある.
signed int, unsigned int
signed short, unsigned short
signed char, unsigned char
4鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
2の補数の定義
n ビットの 2 進数において,ある数 x の
「2の補数 (2’s complement)」とは,
2n – x
である
(8 ビットなら,256 – x になる)
2の補数表示による n ビットの符号つき数とは,
• 非負の数 x (0≦x ≦ 2n–1 – 1) を x の符号なし2進表示で,
• 負の数 –x (0 < x ≦ 2n–1) を x の「2の補数」,すなわち (2n – x)
の符号なし2進表示で
表したものである
5鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
2の補数が使われる理由
01111010 = 122(10)
+) 11111111 = -1(10)
101111001 = 121(10)
なぜこのようにうまく行くのか? → 循環しているのがミソ
8ビットの場合,28を足すと一巡して元の数に戻る
28 – 1 を足すと,元の数より 1 少ない数に落ち着く
28 – x を足すと,元の数より x 少ない数に落ち着く (= 減算)
(符号と絶対値法だと,数の並ぶ順序が変わってしまうのでこうはいかない:
0, 1, 2, …, 126, 127, -0, -1, -2, …, -126, -127)
はみ出したビットは捨てる
符号を気にせず加算・減算を実行することができる
6鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
例題
ファミリーコンピュータ用ゲーム「スーパーマリオブラザーズ」(任
天堂(株), 1985年) には,「無限1up」「無限増殖」などと呼ばれる
テクニックが存在したことが知られている.すなわち,ある操作を
行うことで,プレイヤストック数 (ゲームオーバになるまでに許容さ
れるミスの回数,残機数) を際限なく増加させ続けることが可能で
あった.
一方,プレイヤストックを一定数以上に増やしすぎると,その後
たった一度のミスでゲームオーバになってしまうという現象も生じ
た.内部でどのような処理が行われていたか推測して述べよ.
7鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
https://www.youtube.com/watch?v=FvbWaPfscGg
例: アリアン5型ロケット打ち上げ失敗
8鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
• 慣性基準装置が16ビット符号つき数からのオーバフローで
エラーを起こした
• そのエラー診断番号がフライトデータだとみなされてブース
ターおよびエンジンのノズル方向が制御された
• 迎角が20度以上になり,分解,爆発した
• バックアップの慣性基準装置も同じエラーを起こしていた
J. L. Lions et al.: ARIANE 5, Flight 501 Failure, Ariane 501 Inquiry Board Report, 1996.
1996年6月4日,欧州宇宙機関が
70億ユーロをかけて開発したアリ
アン5型ロケットは,打ち上げ37秒
後に爆発した
http://www.bloomberg.com/news/photo-essays/2012-08-07/when-software-catastrophe-strikes
9鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
2の補数表現の符号つき数の操作
• 加減算
• 加算はそのまま計算するだけだということが分かった
• 減算は,「引く数」に負号をつけて2の補数で表し,加算を
実行すればよい: 100 – 30 = 100 + (-30)
• では,符号反転を行うには?
• 符号反転(2の補数変換)
• 「ビットを反転して1を足す」
• 2の補数表現 と 普通の10進正負の数の相互変換
10鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
符号反転
x = 30 (10) → 00011110 (2)
-x = -30 (10) → ? (2)
x の2の補数 = 2n – x = (2n – 1) – x + 1
111…111 (1がn個並んだもの)
11111111
-) 00011110
11100001
繰り下がりが起きない!
結局 1 と 0 を反転させるだけ
(「1の補数」と呼ばれる)
それに1を足すと,符号反転結
果が得られる
11100001
+) 00000001
11100010
結論: 符号反転をするには,各ビットを反転し,1を加えればよい
正→負,負→正 のどちらでもOK (∵2n – (2n - x) = x)
11鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
10進の正負の数との変換
10進 → 2進:
• 正の数であれば,そのまま2進数で表示
• 負の数であれば,
方法1) 絶対値を2進表示し,符号反転
方法2) 絶対値を 2n から引いたものを2進表示
2進 → 10進:
• MSBが0であれば非負なので,そのまま10進数へ変換
• MSBが1であれば負なので,
方法1) 符号反転処理をしてから10進数へ変換し,負号
をつける
方法2) 10進数へ変換したものを 2n から引いて,負号
をつける
12鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
例題
1. 10010110 (2進8ビット,2の補数表現の符号つき数) を10進
数に変換せよ
2. –50 (10進数) を 8 ビットの2の補数表現の符号つき2進数で
表せ.
13鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
例題 解答例
1. MSB = 1 なので負の数である.
方法1) まず符号反転処理してから10進に変換し,負号をつける
10010110
→ 01101001
+) 1
01101010 → 106 → -106
方法2) まず10進数に変換して,それを256から引いて負号をつける
10010110
→ 01101001
+) 1
01101010 → 106 → -106
10010110 (正数だと思って変換)
→ 150
→ -(256-150)= -106
2. 方法1) 50 を符号反転する.50 = 32 + 16 + 2 = 00110010(2)
なので,11001101(2) + 1 = 11001110(2)
方法2) 256 – 50 = 206 = 128 + 64 + 8 + 4 + 2 = 11001110(2)
14鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
実数の表現
考え方の基礎は,いわゆる科学的記数法(指数表記)
• 6.02 × 1023
• 1.602 × 10-19
指数部仮数部
これの2進数版が浮動小数点数
• 仮数部も指数も有限ビットの2進数で表す
• 指数部の底は 10 ではなく 2
• 仮数部は 1 以上 2 未満にする(正規化)
仮数部は1 以上10 未満にする(正規化)
仮数部の桁数がいわゆる有効数字
浮動小数点数を用いる (教科書1.3節)
15鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
IEEE 754 浮動小数点数
単精度 (C言語の float)
倍精度 (C言語の double)
1 8 23-bit
1 11 52-bit
符号 指数部 仮数部
符号 指数部 仮数部
– 1.01101101 × 21100110
符号:
0: 正
1: 負
指数部
仮数部
浮動小数点数には誤差がつきもの
16鏡 慎吾 (東北大学): 計算機工学 2017 (14)
for (double x = 0.0; x <= 7.0; x += 0.7) {
printf("x = %f¥n", x);
}
x = 0.000000
x = 0.700000
x = 1.400000
x = 2.100000
x = 2.800000
x = 3.500000
x = 4.200000
x = 4.900000
x = 5.600000
x = 6.300000
0 以上 7.0 以下の数を 0.7 間隔で出力するつもり
?!!??!??!??
結果:
17鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
練習問題
8ビットの符号つき数
(a) 00101100
(b) 11101101
(c) 10100101
をそれぞれ,
1) 10 進数,16進数で表せ
2) 符号を反転した数を,2の補数表示の符号つき数で表せ
3) (a) を 3ビット右シフトし,元の数の8分の1になっている
かどうか調べよ.
18鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1)
練習問題 解答例
1) 10進数: (a) 44 (b) – 19 (c) – 91
16進数: (a) 2c (b) ed (c) a5
2) (a) 11010100 (b) 00010011 (c) 01011011
3) 000000101 (44/8 の小数点以下切捨てになっている)
1) 正の数は普通に変換する.負の数は,10進にしてから 28 から引くか,符号
反転してから10進にするか.どうせ(2)で符号反転するんだから,後者の方
が楽かも.
2) ビット反転して 1 を足す.
3) 定義どおり計算.

Weitere ähnliche Inhalte

Ähnlich wie kagamicomput201803

kagamicomput201702
kagamicomput201702kagamicomput201702
kagamicomput201702swkagami
 
kagami_comput2016_02
kagami_comput2016_02kagami_comput2016_02
kagami_comput2016_02swkagami
 
Financial training chapter2 2nd 'Sequence'
Financial training chapter2 2nd 'Sequence'Financial training chapter2 2nd 'Sequence'
Financial training chapter2 2nd 'Sequence'TakeshiFuchigami2
 
Financial training chapter2 1st 'Exponent and logarithm'
Financial training chapter2 1st 'Exponent and logarithm'Financial training chapter2 1st 'Exponent and logarithm'
Financial training chapter2 1st 'Exponent and logarithm'TakeshiFuchigami2
 
kagamicomput201708
kagamicomput201708kagamicomput201708
kagamicomput201708swkagami
 

Ähnlich wie kagamicomput201803 (7)

kagamicomput201702
kagamicomput201702kagamicomput201702
kagamicomput201702
 
kagami_comput2016_02
kagami_comput2016_02kagami_comput2016_02
kagami_comput2016_02
 
Financial training chapter2 2nd 'Sequence'
Financial training chapter2 2nd 'Sequence'Financial training chapter2 2nd 'Sequence'
Financial training chapter2 2nd 'Sequence'
 
3 Info Theory
3 Info Theory3 Info Theory
3 Info Theory
 
Financial training chapter2 1st 'Exponent and logarithm'
Financial training chapter2 1st 'Exponent and logarithm'Financial training chapter2 1st 'Exponent and logarithm'
Financial training chapter2 1st 'Exponent and logarithm'
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
kagamicomput201708
kagamicomput201708kagamicomput201708
kagamicomput201708
 

Mehr von swkagami

kagamicomput201814
kagamicomput201814kagamicomput201814
kagamicomput201814swkagami
 
kagamicomput201813
kagamicomput201813kagamicomput201813
kagamicomput201813swkagami
 
kagamicomput201812
kagamicomput201812kagamicomput201812
kagamicomput201812swkagami
 
kagamicomput201811
kagamicomput201811kagamicomput201811
kagamicomput201811swkagami
 
kagamicomput201810
kagamicomput201810kagamicomput201810
kagamicomput201810swkagami
 
kagamicomput201809
kagamicomput201809kagamicomput201809
kagamicomput201809swkagami
 
kagamicomput201808
kagamicomput201808kagamicomput201808
kagamicomput201808swkagami
 
kagamicomput201807
kagamicomput201807kagamicomput201807
kagamicomput201807swkagami
 
kagamicomput201806
kagamicomput201806kagamicomput201806
kagamicomput201806swkagami
 
kagamicomput201805
kagamicomput201805kagamicomput201805
kagamicomput201805swkagami
 
kagamicomput201804
kagamicomput201804kagamicomput201804
kagamicomput201804swkagami
 
kagamicomput201801
kagamicomput201801kagamicomput201801
kagamicomput201801swkagami
 
kagamicomput201714
kagamicomput201714kagamicomput201714
kagamicomput201714swkagami
 
kagamicomput201713
kagamicomput201713kagamicomput201713
kagamicomput201713swkagami
 
kagamicomput201712
kagamicomput201712kagamicomput201712
kagamicomput201712swkagami
 
kagamicomput201711
kagamicomput201711kagamicomput201711
kagamicomput201711swkagami
 
kagamicomput201710
kagamicomput201710kagamicomput201710
kagamicomput201710swkagami
 
kagamicomput201709
kagamicomput201709kagamicomput201709
kagamicomput201709swkagami
 
kagamicomput201707
kagamicomput201707kagamicomput201707
kagamicomput201707swkagami
 
kagamicomput201706
kagamicomput201706kagamicomput201706
kagamicomput201706swkagami
 

Mehr von swkagami (20)

kagamicomput201814
kagamicomput201814kagamicomput201814
kagamicomput201814
 
kagamicomput201813
kagamicomput201813kagamicomput201813
kagamicomput201813
 
kagamicomput201812
kagamicomput201812kagamicomput201812
kagamicomput201812
 
kagamicomput201811
kagamicomput201811kagamicomput201811
kagamicomput201811
 
kagamicomput201810
kagamicomput201810kagamicomput201810
kagamicomput201810
 
kagamicomput201809
kagamicomput201809kagamicomput201809
kagamicomput201809
 
kagamicomput201808
kagamicomput201808kagamicomput201808
kagamicomput201808
 
kagamicomput201807
kagamicomput201807kagamicomput201807
kagamicomput201807
 
kagamicomput201806
kagamicomput201806kagamicomput201806
kagamicomput201806
 
kagamicomput201805
kagamicomput201805kagamicomput201805
kagamicomput201805
 
kagamicomput201804
kagamicomput201804kagamicomput201804
kagamicomput201804
 
kagamicomput201801
kagamicomput201801kagamicomput201801
kagamicomput201801
 
kagamicomput201714
kagamicomput201714kagamicomput201714
kagamicomput201714
 
kagamicomput201713
kagamicomput201713kagamicomput201713
kagamicomput201713
 
kagamicomput201712
kagamicomput201712kagamicomput201712
kagamicomput201712
 
kagamicomput201711
kagamicomput201711kagamicomput201711
kagamicomput201711
 
kagamicomput201710
kagamicomput201710kagamicomput201710
kagamicomput201710
 
kagamicomput201709
kagamicomput201709kagamicomput201709
kagamicomput201709
 
kagamicomput201707
kagamicomput201707kagamicomput201707
kagamicomput201707
 
kagamicomput201706
kagamicomput201706kagamicomput201706
kagamicomput201706
 

Kürzlich hochgeladen

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Kürzlich hochgeladen (8)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

kagamicomput201803

  • 1. 東北大学 工学部 機械知能・航空工学科 2018年度 クラスC3 D1 D2 D3 情報科学基礎 I 大学院情報科学研究科 鏡 慎吾 http://www.ic.is.tohoku.ac.jp/~swk/lecture/ 3. 数の表現 ― 符号つき整数 (教科書1.2節) + 実数の表現 (教科書1.3節)
  • 2. 2鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 負の数の表現 素朴な方法 (符号と絶対値法) 通常我々は,10進数の絶対値の前に – をつけて負の数を表す. 同様に,最上位ビットで符号を表し,残りで絶対値を表せばよい 10111011 符号ビット: 0: 正 1: 負 絶対値 問題点: •ゼロの表現が2通り存在する •加減算が煩雑になる → 通常は,2の補数表示と呼ばれる方式が用いられる
  • 3. 3鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 「2の補数」表現による符号つき数 111 7 110 6 101 5 100 4 011 3 010 2 001 1 000 0 3ビットの場合: 2進のビット列 符号なし数 -1 -2 -3 -4 3 2 1 0 2の補数表現による符号つき数 000から1ずつ減らして行ったと きの表現を素直に考えるとよい • 一般にnビットの場合, – 2n-1 ~ (2n-1 – 1) の範囲の数を表せる • MSBが1であれば,負 の数である C言語では,各種の整数型に符号 なし,符号つきの種類がある. signed int, unsigned int signed short, unsigned short signed char, unsigned char
  • 4. 4鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 2の補数の定義 n ビットの 2 進数において,ある数 x の 「2の補数 (2’s complement)」とは, 2n – x である (8 ビットなら,256 – x になる) 2の補数表示による n ビットの符号つき数とは, • 非負の数 x (0≦x ≦ 2n–1 – 1) を x の符号なし2進表示で, • 負の数 –x (0 < x ≦ 2n–1) を x の「2の補数」,すなわち (2n – x) の符号なし2進表示で 表したものである
  • 5. 5鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 2の補数が使われる理由 01111010 = 122(10) +) 11111111 = -1(10) 101111001 = 121(10) なぜこのようにうまく行くのか? → 循環しているのがミソ 8ビットの場合,28を足すと一巡して元の数に戻る 28 – 1 を足すと,元の数より 1 少ない数に落ち着く 28 – x を足すと,元の数より x 少ない数に落ち着く (= 減算) (符号と絶対値法だと,数の並ぶ順序が変わってしまうのでこうはいかない: 0, 1, 2, …, 126, 127, -0, -1, -2, …, -126, -127) はみ出したビットは捨てる 符号を気にせず加算・減算を実行することができる
  • 6. 6鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 例題 ファミリーコンピュータ用ゲーム「スーパーマリオブラザーズ」(任 天堂(株), 1985年) には,「無限1up」「無限増殖」などと呼ばれる テクニックが存在したことが知られている.すなわち,ある操作を 行うことで,プレイヤストック数 (ゲームオーバになるまでに許容さ れるミスの回数,残機数) を際限なく増加させ続けることが可能で あった. 一方,プレイヤストックを一定数以上に増やしすぎると,その後 たった一度のミスでゲームオーバになってしまうという現象も生じ た.内部でどのような処理が行われていたか推測して述べよ.
  • 7. 7鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) https://www.youtube.com/watch?v=FvbWaPfscGg
  • 8. 例: アリアン5型ロケット打ち上げ失敗 8鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) • 慣性基準装置が16ビット符号つき数からのオーバフローで エラーを起こした • そのエラー診断番号がフライトデータだとみなされてブース ターおよびエンジンのノズル方向が制御された • 迎角が20度以上になり,分解,爆発した • バックアップの慣性基準装置も同じエラーを起こしていた J. L. Lions et al.: ARIANE 5, Flight 501 Failure, Ariane 501 Inquiry Board Report, 1996. 1996年6月4日,欧州宇宙機関が 70億ユーロをかけて開発したアリ アン5型ロケットは,打ち上げ37秒 後に爆発した http://www.bloomberg.com/news/photo-essays/2012-08-07/when-software-catastrophe-strikes
  • 9. 9鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 2の補数表現の符号つき数の操作 • 加減算 • 加算はそのまま計算するだけだということが分かった • 減算は,「引く数」に負号をつけて2の補数で表し,加算を 実行すればよい: 100 – 30 = 100 + (-30) • では,符号反転を行うには? • 符号反転(2の補数変換) • 「ビットを反転して1を足す」 • 2の補数表現 と 普通の10進正負の数の相互変換
  • 10. 10鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 符号反転 x = 30 (10) → 00011110 (2) -x = -30 (10) → ? (2) x の2の補数 = 2n – x = (2n – 1) – x + 1 111…111 (1がn個並んだもの) 11111111 -) 00011110 11100001 繰り下がりが起きない! 結局 1 と 0 を反転させるだけ (「1の補数」と呼ばれる) それに1を足すと,符号反転結 果が得られる 11100001 +) 00000001 11100010 結論: 符号反転をするには,各ビットを反転し,1を加えればよい 正→負,負→正 のどちらでもOK (∵2n – (2n - x) = x)
  • 11. 11鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 10進の正負の数との変換 10進 → 2進: • 正の数であれば,そのまま2進数で表示 • 負の数であれば, 方法1) 絶対値を2進表示し,符号反転 方法2) 絶対値を 2n から引いたものを2進表示 2進 → 10進: • MSBが0であれば非負なので,そのまま10進数へ変換 • MSBが1であれば負なので, 方法1) 符号反転処理をしてから10進数へ変換し,負号 をつける 方法2) 10進数へ変換したものを 2n から引いて,負号 をつける
  • 12. 12鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 例題 1. 10010110 (2進8ビット,2の補数表現の符号つき数) を10進 数に変換せよ 2. –50 (10進数) を 8 ビットの2の補数表現の符号つき2進数で 表せ.
  • 13. 13鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 例題 解答例 1. MSB = 1 なので負の数である. 方法1) まず符号反転処理してから10進に変換し,負号をつける 10010110 → 01101001 +) 1 01101010 → 106 → -106 方法2) まず10進数に変換して,それを256から引いて負号をつける 10010110 → 01101001 +) 1 01101010 → 106 → -106 10010110 (正数だと思って変換) → 150 → -(256-150)= -106 2. 方法1) 50 を符号反転する.50 = 32 + 16 + 2 = 00110010(2) なので,11001101(2) + 1 = 11001110(2) 方法2) 256 – 50 = 206 = 128 + 64 + 8 + 4 + 2 = 11001110(2)
  • 14. 14鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 実数の表現 考え方の基礎は,いわゆる科学的記数法(指数表記) • 6.02 × 1023 • 1.602 × 10-19 指数部仮数部 これの2進数版が浮動小数点数 • 仮数部も指数も有限ビットの2進数で表す • 指数部の底は 10 ではなく 2 • 仮数部は 1 以上 2 未満にする(正規化) 仮数部は1 以上10 未満にする(正規化) 仮数部の桁数がいわゆる有効数字 浮動小数点数を用いる (教科書1.3節)
  • 15. 15鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) IEEE 754 浮動小数点数 単精度 (C言語の float) 倍精度 (C言語の double) 1 8 23-bit 1 11 52-bit 符号 指数部 仮数部 符号 指数部 仮数部 – 1.01101101 × 21100110 符号: 0: 正 1: 負 指数部 仮数部
  • 16. 浮動小数点数には誤差がつきもの 16鏡 慎吾 (東北大学): 計算機工学 2017 (14) for (double x = 0.0; x <= 7.0; x += 0.7) { printf("x = %f¥n", x); } x = 0.000000 x = 0.700000 x = 1.400000 x = 2.100000 x = 2.800000 x = 3.500000 x = 4.200000 x = 4.900000 x = 5.600000 x = 6.300000 0 以上 7.0 以下の数を 0.7 間隔で出力するつもり ?!!??!??!?? 結果:
  • 17. 17鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 練習問題 8ビットの符号つき数 (a) 00101100 (b) 11101101 (c) 10100101 をそれぞれ, 1) 10 進数,16進数で表せ 2) 符号を反転した数を,2の補数表示の符号つき数で表せ 3) (a) を 3ビット右シフトし,元の数の8分の1になっている かどうか調べよ.
  • 18. 18鏡 慎吾 (東北大学): 情報科学基礎I 2018 (1) 練習問題 解答例 1) 10進数: (a) 44 (b) – 19 (c) – 91 16進数: (a) 2c (b) ed (c) a5 2) (a) 11010100 (b) 00010011 (c) 01011011 3) 000000101 (44/8 の小数点以下切捨てになっている) 1) 正の数は普通に変換する.負の数は,10進にしてから 28 から引くか,符号 反転してから10進にするか.どうせ(2)で符号反転するんだから,後者の方 が楽かも. 2) ビット反転して 1 を足す. 3) 定義どおり計算.