投稿

6月, 2022の投稿を表示しています

6月29日(水)1コマ目

イメージ
今日、やったこと ビットシフトで掛け算 誤差(オーバーフロー、アンダーフロー) 今日のホワイトボード ビットシフトで掛け算 2進数の場合、x2 n なら、nビット左シフト。 もし、2 n にならない場合は、(2 n1 +2 n2 +・・)のようにバラシて。 図 左シフトで掛け算 問4 5×6 = (4 + 1)×6 = (2 2 + 2 0 )×6 でも可。 図 左シフトで5×6 問5 ー7は絶対値7の2の補数で表す。 図 左シフトでー7×7① 図 左シフトでー7×7② 誤差 真値からの差が誤差。 コンピュータではやり方によっては誤差が発生します。 どんなときにどんな誤差が発生するかを把握しておいた方がいい。 オーバーフロー たとえば、char型(unsigned char型も)ならビット長は1バイト(8ビット)。この範囲を超えると誤差が発生する。 サンプルプログラムでは1からどんどんインクリメント(+1)していくと、254、255の次は256ではなく、0になってしまう。これはオーバーフローが発生したため。 図 オーバーフロー アンダーフロー 整数型では発生しないが、実数型(float型、double型)で計算結果が最小値より小さくなる場合に発生する。 サンプルプログラムではfloat型の1.0を÷2(1ビット右シフト)して、さらに÷2してを繰り返す。 途中で突然0になってしまう。

6月22日(水)1コマ目

イメージ
今日、やったこと [確認テスト]浮動小数点形式 ビットシフト 今日のホワイトボード 論理シフトと算術シフト 右シフトには論理シフトと算術シフトがあります。 どちらを使うかはシフト対象ビット列が符号あり、符号なしで決まります。 符号なしビット列なら論理シフト(無条件に0を入れる) 符号ありビット列なら算術シフト(符号ビットと同じ値を入れる) 図 論理シフトと算術シフトの使い分け 演習問題 問2 符号ありビット列なので、右シフトは算術シフト。 図 問2 問3  16進数1ケタは2進数4ビット。 16進数=>2進数なら、16進数1ケタを4ビットの2進数に変換。 2進数=>16進数なら、2進数4ビットを1ケタの16進数に変換。 図 問3 左シフトは 結論から言えば、 掛け算 。 10進数で考えてみると以下のとおり。 図 左シフトは 一般化すると、 左シフトは  ×基数 シフトしたビット数 右シフトは 結論から言えば、 割り算 。 10進数で考えると以下のとおり。 図 右シフト 一般化すると、 右シフトは  ÷基数 シフトしたビット数 コンピュータの四則演算 下表のように計算をしている。 演算 実現方法 + 加算器回路で計算 - 負数を2の補数表現にして、加算器で加算

6月15日(水)1コマ目

イメージ
今日、やったこと [確認テスト](負数あり)2進数=>10進数 (浮動小数点形式)2進数=>10進数 バイアス値について ビットシフト 今日のホワイトボード (浮動小数点形式)2進数=>10進数 単精度浮動小数点形式のフォーマットに従って、ビット列を解釈すればOKです。 問6 指数部の8ビットの値はバイアス値が加算されている点に注意してください。 仮数部の23ビットの値は正規化した仮数のうち、小数部だけです。整数部は1です。 図 (浮動小数点形式)2進数=>10進数 問6 問7 問6とおなじようにすれば問題ありません。 図 (浮動小数点形式)2進数=>10進数 問7 バイアス値について 指数部の値にバイアス値127を加えるのは、 ビット列を単純に大小比較できるようにするため です。 また、よくよく考えるとバイアス値は128では?と思うかもしれません。 指数部がオール0、オール1にはそれぞれ意味があるため、バイアス値を127にしています。 詳しくは今日配布した資料を確認してください。 ビットシフト ビット列を左右にずらすことをビットシフトと呼びます。 左にずらせば左シフト、右にずらせば右シフトです。 図 ビットシフト 演習問題 問1 次回は、ビットシフトをもう少し詳しくやります。 次回は 浮動小数点形式のテストをします。 10進数=>2進数、2進数=>10進数両方です。

6月8日(水)1コマ目

イメージ
今日、やったこと 浮動小数点形式 今日のホワイトボード 小数の表し方 小数点の位置を固定する、しないで以下の形式があります。 図 固定小数点形式、浮動小数点形式 浮動小数点形式での2進数の小数 以下のようにあらわす。2進数なので基数は2。 図 浮動小数点形式で2進数の小数をあらわすと 正規化 10進数の小数を浮動小数点形式の2進数にする際、正規化を行い仮数部を1.xxxにする。 図 正規化 練習問題 10進数の小数を浮動小数点形式の2進数にする問題をやりました。 問1 図 問1 問2 図 問2 問3 図 問3 問4 図 問4 すいません。ホワイトボード間違ってます。 111.1を正規化すると、1.111×2 2 です。 問5 図 問5 次回は やるはずだったテスト(2進数=>10進数(負数あり))をやります。