投稿

7月14日(木)2コマ目

イメージ
今日、やったこと 文字コード 今日のホワイトボード [符号化方式]Shift_JIS 1文字が1バイト(半角文字)、2バイト(全角文字)と可変長。 図 Shift_JIS 飛ばした演習問題 スライドNo.41 EUC-JPで符号化 (半角)1 ASCIIなら0x31。ASCIIの文字はEUC-JPでも同じ値に符号化されるので、0x31。 (半角)イ 半角のイはJIS X 0201では0xB2。 JIS X 0201の文字は 1バイト目に0x8Eを付加。 2バイト目はJIS X 0201で符号化した値。 よって、0x8E 0xB2。 (半角)ヌ 半角のヌはJIS X 0201では0xC7。 JIS X 0201の文字は 1バイト目に0x8Eを付加。 2バイト目はJIS X 0201で符号化した値。 よって、0x8E 0xC7。 スライドNo.42 EUC-JPで符号化 (全角)イ 全角のイはJIS X 0208の5区4点。 JIS X 0208の文字は 区、点に0xA0を足す。 よって、0xA5 0xA4。 (全角)ヌ 全角のイはJIS X 0208の5区44点。 JIS X 0208の文字は 区、点に0xA0を足す。 1バイト目は 0x05 + 0xA0 = 0xA5。 2バイト目は 44 => 0x2C 0x2C + 0xA0 = 0xCC。 よって、0xA5 0xCC。 スライドNo.56 UTF-8で符号化 1 1はUNICODE符号ではU+0031。 この範囲はASCIIで変換した値のままの1バイト。よって、0x31。 A ※Aではなく、Aに̈(ウムラウト)が付いた文字。 ▼▼▼▼ 間違えていました。ごめんなさい。 ▼▼▼▼ UNICODE符号ではU+00C4。 この範囲は必要なビット長は11ビット。よって、UNICODE符号の00C4を11ビットにすると、     C  4  000 1100 0100 となる。これを2バイトのフォーマット(0000 0yyy xxxx xxxx)にあてはめると、  0000 0000 1100 0100 となる。16進数で表すと、  0x00 0xC4 となる。よって、0x00 0xC4。 ▲▲▲▲ 間違えていました。ごめんなさい。 ▲▲▲▲ ▽▽▽▽ ここからが正解 ▽▽▽▽ UNICODE符号ではU+00C4。

7月13日(水)1コマ目

イメージ
今日、やったこと 誤差 文字コード 今日のホワイトボード 誤差 オーバーフロー データがデータサイズより大きくなると発生。 アンダーフロー 浮動小数点データが最小値より小さくなると発生。 丸め誤差 データサイズに収めるために、あるケタより小さい桁の 値を丸めてしまう (切り上げや切り捨てを行う)ことで発生する誤差。 ケタ落ち 近い値同士の減算をした場合のように 有効ケタ数が減ってしまう ことで発生する誤差。 情報落ち 非常に離れた値同士の計算を行う際、 ケタ数を合わせるためにデータが欠落する ことで発生する誤差。 文字コード 「文字コード」という言葉がごちゃごちゃに扱われているので注意!! 符号化方式を文字コードと呼んだり 符号化されたデータを文字コードと呼んだり 文字集合・符号化 文字集合は符号化する文字のあつまり。 文字は符号化方式に従って符号化される。 図 文字集合・符号化 用語解説 JIS、ISO いずれも規格(ルール)を決める団体および規格名の総称。 図 JIS、ISO エンコード・デコード データを符号化することをエンコード。 符号化されたデータをもとに戻すことをデコード。 図 エンコード、デコード ASCIIで符号化すると プログラムで文字を変数に代入すると、各変数のメモリ上のデータは下図のように符号化された値が代入されている。 図 C言語での文字の扱い 次回は 文字コードの続きをやります。 また、誤差のテストをそのうちやります。(多分、次回はやらない) 

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進数(負数あり))をやります。  

5月25日(水)1コマ目

イメージ
今日、やったこと [確認テスト]負の10進数=>2進数 2進数=>10進数(負数あり) 今日のホワイトボード 2進数を10進数へ(負数あり) 2進数にした際、負数は絶対値の2の補数で表す場合での10進数への基数変換の方法です。 図 2進数=>10進数(負数あり) ①最上位ビットチェック 0なら正の数=>いままでどおりのやり方で10進数へ 1なら負の数=>②へ ②1の補数へ この2進数は絶対値の2の補数。 まずは1の補数へ変換。  2の補数 = 1の補数 + 1 より、   1の補数 = 2の補数 - 1 ③元の数の絶対値へ 元の数の絶対値に戻すには、 ビット反転 。   ④10進数へ 絶対値を10進数へ。 ⑤符号をつける 負の数なので、-をつける。 ②、③を一気にやる方法 1の補数にして、元の絶対値にして、と何段階もやらなくてもできます。 例えば4ビットの場合  2の補数 = 10000 - 元の数  元の数 = 10000 - 2の補数 4ビットなら  5ビットの最小値 - 2の補数  で元の数がわかります。 練習問題 ⑩はひっかけです。ビット列が指定ビット長に足りません。 足りない場合は、上位ビットに0を追加してください。 図 ビット長に足りない場合 次回は 2進数=>10進数(負数あり)のテストをします。