ページへ戻る

− Links

 印刷 

FDIII-HC Starter Kit Guide​/Chapter1.4 のバックアップソース(No.4) :: Besttechnology

knowledge:FDIII-HC Starter Kit Guide/Chapter1.4 のバックアップソース(No.4)

« Prev[4]  Next »[5]
TITLE:FDIII-HC Starter Kit Guide Capter1.4
*C言語の基礎 [#pcd8150f]
このページではFREEDOMライブラリを使用した場合のC言語について説明をします。~
通常のC言語と若干異なる場合があります。

**基本 [#f828bd2e]
***2進数・16進数 [#i00e054a]
日常的に使用されている10倍毎に位を取る(桁上がりする)表記方法は10進法と呼ばれており、馴染み深いものとなっていますが、コンピュータの世界では2進法や16進法での表記が行われることがあります。~
1桁で表記できる数字はそれぞれの基数-1です。2進数であれば0と1しか表記できず、10進数であれば0から9までが、16進数では0から15までが表記可能となります。但し、10以上は数字として1桁表記することができないため、英字を使用します。~
下表は10進数と2進数、及び16進数の対応表です。
| 10進数 | 2進数 | 16進数 |
| 0 | 0 | 0 |
| 1 | 1 | 1 |
| 2 | 10 | 2 |
| 3 | 11 | 3 |
| 4 | 100 | 4 |
| 5 | 101 | 5 |
| 6 | 110 | 6 |
| 7 | 111 | 7 |
| 8 | 1000 | 8 |
| 9 | 1001 | 9 |
| 10 | 1010 | A |
| 11 | 1011 | B |
| 12 | 1100 | C |
| 13 | 1101 | D |
| 14 | 1110 | E |
| 15 | 1111 | F |
| 16 | 10000 | 10 |

***ビット・バイト [#z62e3ad6]
コンピュータの世界で使われる情報(データ)の最小単位をビットと言います。1ビットは0か1の値を扱い、2進数の1桁分が扱う大きさとなります。~
~
また1ビットが8個集まったものを1バイト(=8ビット)と言います。~
#ref(bitbyte.png,100%)
1バイトで表すことができる数値は10進数で表すと0~255です。

下表は10進数を2進数(1バイト)で表した例です。
| 10進数 | 2進数(1バイド) |
| 0 | 00000000 |
| 50 | 00110010 |
| 128 | 01000000 |
| 200 | 11001000 |
| 255 | 11111111 |
***変数 [#h0d4cb7f]
変数は数値や文字を置いておく入れ物です。~
変数を使い始める前に「このようなデータを入れるこんな名前の入れ物を使います」と宣言しなければなりません。
#ref(variable1.png,100%)
「int型のデータを入れるaという名前の入れ物を使います」と宣言しています。
int型というのは4バイトの整数という意味です。詳しくは後述します。~

#ref(variable2.png,100%)
 a=24;
は変数aに24という整数を入れることになります。
***データ型 [#p7400a94]
変数は使い始める前に「このようなデータを入れるこんな名前の入れ物を使います」と予め宣言しておかなければなりません。「このようなデータ」を型と言います。~
型には以下があり、それぞれサイズと入る値の範囲が異なります。

| 型の名前 | サイズ | 入る値の範囲 |
| char | 1バイト | -128~127 |
| unsigned char | 1バイト | 0~255 |
| short | 2バイト | -32768~32767 |
| unsigned short | 2バイト | 0~65535 |
| long | 4バイト | -2147483648~2147483647 |
| unsigned long | 4バイト | 0~4294967295 |
| int | 4バイト | -2147483648~2147483647 |
| unsigned int | 4バイト | 0~4294967295 |

変数は数値や文字を置いておく入れ物でした。
大きい入れ物なら大きな数字も入れられるので、変数のサイズが大きい型を選べば良いと思うかもしれません。
しかしコンピュータが大きいサイズの変数を扱うには、小さいサイズの変数に比べて記憶しておく場所も大きくなり、それに伴う様々な処理にかかる時間も必要になってきます。~
~
unsignedの付いている型はマイナスを扱うことができませんが、表すことでのできる最大値は倍となります。~

***演算子 [#k3be0d0f]
基本的な演算子には以下があります。
| 演算子 | 意味 | 使用例 |
| = | 右辺を左辺に代入 | a = b |
| + | 足し算 | c = a + b |
| - | 引き算 | c = a - b |
| * | 掛け算 | c = a * b |
| / | 割り算 | c = a / b |
| % | 割り算の余り | c = a % b |

算数でa=bは、aとbは同じという意味で使うのが一般的ですが、C言語では右辺を左辺に代入します。例えばa=2を左辺、b=3を右辺とし、a=bにすると、bの値がaに代入されa、b両方とも3になります。このため、代入演算子と呼ばれています。~
その他の四則演算に加え、余りを出す演算子を合わせて算術演算子と呼びます。

その他に以下の演算子があります。
基本的な演算子で書き換えることもできますが、プログラムを見易く、短くするために使います。
| 演算子 | 使用例 | 基本演算子で表すと |
| += | a += b | a = a + b |
| -= | a -= b | a = a - b |
| *= | a *= b | a = a * b |
| /= | a /= b | a = a / b |
| %= | a %= b | a = a % b |
| ++ | a++ | a = a + 1 |
| -- | a-- | a = a - 1 |

***比較演算子 [#db59b61c]
比較演算子は後で説明する制御文の条件になります。

| 比較演算子 | 使用例 | 意味 |
| == | a == b | aとbは等しい |
| &#x3c; | a < b | aはbより小さい |
| &#x3e; | a > b | aはbより大きい |
| <= | a <= b | aはb以下 |
| >= | a >= b | aはb以上 |
| != | a != b | aとbは等しくない |

例えば「もしa<bだったら、aに1足す」という制御文を書いた場合、a=3,b=4ならa<bが成り立ちaに1が足されますが、a=4,b=4ならa<bが成り立たないので何もされません。

***論理演算子 [#seea64bd]
論理演算子は後で説明する制御文の条件を組み合わせる時に使用します。

| 論理演算子 | 使用例 | 意味 |
| && | 3 <= a &&  a<= 8 | aは3以上かつ8以下 |
| ! | !(a == 5) | aは5ではない |
| &#x7c;&#x7c; | a < 3 &#x7c;&#x7c; 8 < a | aは3未満または8より大きい |

***アドレス [#s0d770ec]
アドレスとは変数がコンピュータのメモリのどこにあるかを指します。
その名の通りコンピュータ上の住所のようなものです。~
 &a
と書くと変数aのアドレスとなります。この&をアドレス演算子と呼びます。~
主に変数としてaが宣言されている場合に使用します。~
#html{{
<pre class="brush: c">
#include <fd.h>
void main (void) {
  int a, b = 3;
  fd_Wait (2000);
  a = &b;
  printf ("a=%d\n", a);
}
</pre>
}}
 a=2103864
aには3ではなく、bのアドレスの値が入ります。~

***ポインタ [#de8fd791]
アドレスを利用する別の方法としてポインタがあります。~
 char *a = "BEST";
以上がchar型のポインタ宣言となります。BESTという文字列はメモリ上のどこかに格納されており、そのアドレスを示しているのがポインタです。~
BESTという文字列を操作するにはアドレスを介して操作するしかありません。そのため、*を間接演算子と呼びます。~
以下にアドレス演算子を使用した場合と比較してみます。
| 状態 | アドレス演算子 | 間接演算子 |
| 宣言 | int a; | int *a; |
| アドレスを渡す | b = &a; | b = a; |
| 内容を渡す | b = a; | b = *a; |
文字列の場合は配列と同じ扱いとなります。
| アドレス | 文字 | 説明 |
| 00112239 | B |アドレスは例です |
| 0011223A | E | |
| 0011223B | E | |
| 0011223C | T | |
| 0011223D | Null |最後にNULLがセットされます |
BESTは、文字としては4文字ですが、メモリ上は5バイト確保されます。C言語ではBESTは只の文字データであり、文字列ではありません。BESTの最後にNULLが付与されて初めて文字列として扱われます。~
つまり~
 char *a = "BEST";
は~
 char a[5] = { 'B', 'E', 'S', 'T', NULL };
と同じです。~
このため、配列として扱い、インデックスを使用することで、文字の取得が可能です。
#html{{
<pre class="brush: c">
 char *a = "BEST", b;
 b = a[1]; // 2文字目を代入します(インデックスは0から開始)
</pre>
}}
bにはEが代入されます。~
ポインタを使用して文字の取得を行うことも可能です。~
#html{{
<pre class="brush: c">
 char *a = "BEST", b, *c;
 c = a;  // アドレスをコピーします
 c++;    // アドレスを1つ進めます
 b = *c; // アドレスの示す内容を代入します
</pre>
}}
配列として扱った時と同じように、bにはEが代入されます。~

« Prev[4]  Next »[5]