データベースの勉強
気が進まないがデータベースの勉強も始めた方が良さそうだと思いました。
来年から少しずつやっていこうかなと思います。
ビッグエンディアンとリトルエンディアン
多バイトのデータをメモリに格納する際にどうような順番でバイトを格納していくか問題になります。このメモリに格納する順番をバイトオーダーと呼びます。バイトオーダーの種類は二種類あり、これがビッグエンディアンとリトルエンディアンと呼ばれているものです。
ビッグエンディアンは、多バイトデータの桁の大きいバイトから順に低位のアドレスに格納していきます。
一方、リトルエンディアンは、多バイトデータの桁の小さいバイトから順に低位のアドレスに格納していきます。
例を示します。今、4バイトのデータ 0x12345678 があるとします。1バイトずつ区切ると、0x12 / 0x34 / 0x56 / 0x78 となります。このデータをメモリの0x1000番地から0x1003番地までに格納することにします。
- ビッグエンディアンで格納した場合:0x12 / 0x34 / 0x56 / 0x78
- 0x1000番地 -> 0x12
- 0x1001番地 -> 0x34
- 0x1002番地 -> 0x56
- 0x1003番地 -> 0x78
- リトルエンディアンで格納した場合:0x78 / 0x56 / 0x34 / 0x12
- 0x1000番地 -> 0x78
- 0x1001番地 -> 0x56
- 0x1002番地 -> 0x34
- 0x1003番地 -> 0x12
このようにデータが格納されていきます。参考: Endian(エンディアン)ってなに? | 学校では教えてくれないこと | [技術コラム集]組込みの門 | ユークエスト株式会社
ビッグエンディアンとリトルエンディアンのどちらのバイトオーダーを使うかは、CPUの種類や通信プロトコルの種類によって決められています。もしくは両方に対応していたりもします。
なぜ二つの方法があるかは色々歴史がややこしそうです。どちらの方法もメリット・デメリットがあるそうです。下サイトに色々書いてありました。
二種類のバイトオーダーについて昔聞いたことがありましたが、改めて調べてみて昔より理解できたような気がします。
参考文献
文字コードの勉強
簡単なメモを残します。
概要
コンピュータで文字を処理するには、文字を何らかの数値にする必要があります。この文字から数値にすることを文字の符号化といいます。
文字を符号化する上で重要な点が、文字と数値が一対一に対応することです。一対一に対応しないと正しく情報伝達ができなくなるでしょう。この文字と数値の対応関係のことを文字コードといいます。
文字と数値をどのように対応するか考えると、大きく二つのことを検討する必要がでてきます。
一つ目がどのような文字を扱うかです。これは文字集合と呼びます。英語圏の人は、アルファベット、数字と記号を扱えばよいかもしれませんが、日本人の場合はこれに加えひらがな、カタカナ、漢字を扱う必要がでてきます。このように文字集合の範囲をどうするかという問題は大きそうです。
二つ目がどのように文字に数値を割り振るかです。文字符号化方式といいます。同じ文字集合でも文字に数値を割り振る方法は多くあると考えられるでしょう。
このように文字と数値の対応関係である文字コードはなんだかいっぱいありそうだということが分かると思います。実際にASCII、Latin-1、Sshift-JIS、Unicodeなど多くの文字コードが世の中にあります。
グラム・シュミットの直交化法を知る
重い腰を上げて線形代数の復習をはじめました。
パラパラと本を読んでいたところ、互いに線形独立なn個のベクトルを正規直交化系に変換する方法として、グラム・シュミットの直交化が紹介されていました。数式を見ても何を意味しているか全く分かりませんでしたが、以下のサイトで紹介されているように図で考えると理解できました。
ポイントとしては、ベクトルが線形独立ならば、着目しているベクトルから他のベクトルに射影した成分を引いていけば、他のベクトルと直交する、ということですね。なので数式でも、次元が増えるごとに引くベクトルが増えていっていますね。
文字化けを理解したいので文字コードを勉強する
文字化けはなぜ起きるのかよく分からないのでしっかり理解し文字化け対策ができるように勉強したいと思います。