投稿

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

6月30日(水)1コマ目

イメージ
今日、やったこと 文字コード 今日のホワイトボード 文字集合と符号化方式 文字集合は文字の集まり。 符号化方式は文字を符号化(数値)に変換するルール。 扱う文字を決めて(文字集合ができる)、各文字を数値に変換するルール(符号化方式)を決めることでコンピュータで文字が扱うことができる。 規格 文字だけでなく、いろいろなところに出てくるISOとかJIS。 図 JIS、ISO エンコードとデコード 図 エンコードとデコード ASCIIで符号化 ASCIIの対応表で変換できる。 問1 '1'を符号化 図 '1'をASCIIで2進数の符号へ 問2 a*(1+b)を符号化 図 a*(1+b)をASCIIで2進数の符号へ ASCIIでの文字の並び方 数値、アルファベットは一般的な順序と同じ順になっているため、以下のプログラムでAからZまで順に出力できる。 図 ASCIIではA~Zは順に並んでいる あくまでもAからZまで順に並んでいるからできることで、もし、飛び飛びになっていたらできない。 JIS X 0201で符号化 対応表を見ると、数字、アルファベット、記号はASCIIと同じ位置。よって、符号化しても同じ。 JIS X 0201には半角アルファベットが追加されている。これは8ビット目のエリアにある。 図 JIS X 0201で半角カタカナを符号化 UNICODE 結局、国や地域ごとに使っている文字が異なるため、それぞれの国や地域ごとに文字集合が作られた。そして、各文字集合ごとに符号化方式が定められたため、文字が異なる国や地域同士で文字データのやり取りが困難(文字化けが発生する)になった。 グローバルで1つの文字集合を作ろう!で生まれたのがUNICODE。 世界中の文字を収容している(多分)。 次回は 符号化方式の話です。 テストは再来週に誤差と文字コードの内容で行います。 対策として基本情報技術者試験の誤差と文字コードに関する問題をチェックしてください。 また、このテストが情報数学の最後のテストになります。  

6月23日(水)1コマ目

イメージ
今日、やったこと 誤差 今日のホワイトボード オーバーフロー C言語のchar型は1バイト、int型は4バイトのようにサイズが決まっている。 この サイズを超えるデータを代入すると、はみ出してしまいオーバーフローが発生する 。 図 オーバーフロー アンダーフロー C言語のfloat型やdouble型は浮動小数点形式でデータを扱っている。 割り算をすると、仮数部がどんどん小さくなっていき、最終的に0になる。 が、ゼロになる直前までは正しい値。さらに割り算をすると仮数部がゼロになる。これがアンダーフロー。 float型やdouble型のような浮動小数点形式でデータを扱うさい、扱うことができる最小値よりも小さい値になったときにアンダーフローが発生する 。さきほどのゼロはアンダーフローが発生した結果であって、正しい値ではない。 図 アンダーフロー 丸め誤差 C言語のfloat型やdouble型は浮動小数点形式でデータを扱っている。 float型の場合、仮数部は23ビット。よって、仮数部の小数点以下が23ケタを超える場合、23ケタに収めるために24ケタ目以下を切り捨てる必要がある。このとき、 24ケタ目を切り上げる 24ケタ目を切り下げる の2つの選択肢がある。この処理が 丸め処理 。 丸め処理を行うことで発生する誤差が丸め誤差 。 ちなみに、四捨五入も丸め処理の1つであり、四捨五入することで真値との誤差が発生する。この誤差も丸め誤差。 図 丸め誤差 ケタ落ち 有効桁数が少なくなることで、真値から誤差が発生する。この誤差がケタ落ち誤差。 ケタ落ちは近い値同士の引き算の際に発生する 。 情報落ち 計算をする際、2つの値の指数を合わせる。大きな値と小さな値の計算の場合、仮数の一部が切り取られてしまう。この誤差が情報落ち誤差。 大きさが極端に異なる値同士の計算をする際に発生する 。 予告 そのうちテストします。 基本情報にこの辺の問題がちょこちょこ出題されています。 確認しておいてください。

6月16日(水)1コマ目

イメージ
今日、やったこと 基数変換まとめのテスト 誤差 今日のホワイトボード コンピュータでの誤差 コンピュータには誤差なんて発生しないように思われがちですが、データ取り扱いの特徴から 誤差が発生するケースがあります 。 C言語のchar型、unsigned char型 char型、unsigned char型はともに1バイト。 〇char型 符号あり。負数は絶対値の2の補数として格納。 2進数 10進数 1111 1111 -128 0000 0000 0 0111 1111 127 〇unsigned char型 符号なし。 2進数 10進数 0000 0000 0 0111 1111 127 1000 0000 128 1111 1111 255 unsigned char型の変数に初期値1を代入し、その後+1(インクリメント)を繰り返す。 図 変数valのインクリメントを繰り返すと 変数valのインクリメントを繰り返し、その値が255(2進数では1111 1111)になったあと、さらにインクリメントするとどうなるでしょうか? ここで時間切れ。つづきは次回。  

6月9日(水)1コマ目

イメージ
今日、やったこと ビットシフトで掛け算 次回のテストのための問題演習 今日のホワイトボード ビットシフトで掛け算 問 5×6をビットシフトで計算せよ ポイントは 5または6を2のべき乗の和 にすること。 図 5×6をビットシフトで計算 問 7×-7をビットシフトで計算せよ 基本的に5×6と同じですが、-7を2進数にするときに注意。 -7は負の値なので、絶対値7の2の補数になる。 図 7×-7をビットシフトで計算 一応、計算結果の2進数を10進数にしてみた。 先頭ビットが1なので、負数。よって、1100 1111は絶対値の2の補数。 図 ビット列1100 1111を10進数へ まとめテストにむけて 結構前にやったことなので、忘れているかも。 [整数・小数]N進数->10進数 図 [整数・小数]N進数->10進数 [整数]10進数->N進数 [整数]10進数->N進数 [整数]10進数->N進数 [小数]10進数->N進数 [小数]10進数->N進数 次回は 基数変換のまとめテストします。  

6月2日(水)1コマ目

イメージ
今日、やったこと 浮動小数点のテスト ビットシフト 今日のホワイトボード ビットシフトとは ビット列を左右に動かすこと。 左方向 に動かすのは 左シフト 。 左側にできた 空白ビットには0を入れる 。 右方向 に動かすのは 右シフト 。右側にできた 空白ビットに何を入れるかは論理シフトと算術シフトで異なる 。 左シフト これは簡単。左に動かすことでできた空白ビットには0を入れる。 右シフト 右に動かすことでできた空白ビットに0を入れるのは論理シフト。これは簡単。 空白ビットに符号ビット(最上位ビット)と同じ値を入れるのは算術シフト。これは注意。 図 右シフト(算術シフト) 演習問題 右シフトは算術シフト?論理シフト? 右シフトを論理シフトにするか、算術シフトにするかは 符号 なし ビット列 => 論理シフト (0を入れる) 符号 あり ビット列 => 算術シフト (符号ビットと同じ値を入れる) で分かれる。 図 右シフトは論理シフト?算術シフト? 図 問1 図 問2 問3 16進数のケタの数字は0~Fまで。 1ケタ分は2進数では4ビットで表すことができる。 よって、1ケタずつ4ビットに2進数にすればOK。 図 問3 左シフトは何に使う 結論: 掛け算 10進数で考えると、なんてことはない。 図 左シフトは掛け算 右シフトは何に使う 結論: 割り算 10進数で考えてみる。小学校時代の答えとあまりで考えると納得。 図 右シフトは割り算 コンピュータはどうやって計算している? 計算内容 コンピュータでは 足し算 加算器 引き算 負の値を絶対値の2の補数にして加算器 掛け算 左シフト 割り算 右シフト 次回は テストはしません。