変数について
さて、前回書いた通り変数について話していきます
とはいえ、普通のC言語のような紹介はしないようにしていきたいと思います
プログラミングに必要な変数
どんなプログラミングにも変数は必須です(子供向けのScratchは変数を後回しにしていたりしますが)
変数の役割は値をマイコンやパソコンに値を保存しておく機能と考えるといいでしょう
変数には「大きさ」があって、保存したい値によって名前が変わります
型は何種類かあって以下のようになります
| 種類 | 型名 | 大きさ | 範囲 |
|---|---|---|---|
| 文字型 | char | 1byte | 1文字または-128~127 |
| 整数型 | short | 2byte | 整数:-32768~32767 |
| 整数型 | int | 4byte | 整数:約-21億~21億 |
| 整数型 | long | 4byte | 整数:約-21億~21億 |
| 浮動小数点型 | float | 4byte | 単精度浮動小数点数 3.4E-38~3.4E+38 |
| 浮動小数点型 | double | 8byte | 倍精度浮動小数点数 1.7E-308~1.7E+308 |
Eは10のn乗ということで、1.7E+308というのは1.7×10の308乗ということです
また、文字型、整数型には「unsigned」というキーワードをつけて自然数のみを扱うようにもできます
例:unsigned int → 0~約41億 となります
組み込みにおいて、型の大きさは処理系(マイコン)においてだいぶ変わってきます
例えば表にはint型は4バイトとなっていますが、使うマイコンによっては2バイトだったり、long型が8バイトだったりします
unsignedキーワードを合わせると覚えることが多くなりますが、組み込みの場合はそんなに多くの変数を覚える必要はありません
組み込みの場合に使う変数
後述しますが(多分)、コンピュータは小数を扱うのが苦手です
当然のように割り算をすると小数が出てくるので割り算も苦手です
組み込みに使うマイコンは性能がかなり限られているので、割り算や小数を使うと間違いや、処理が遅くなったりします
さらに、マイナスも苦手です
引き算はそんなに苦手ではないのですが、マイナスの数が苦手です
なので、通常変数に入れる値はプラスの数値だけです
で、上述した通り変数の名前が同じでも、使うマイコンによって入れられる値の限界が変わってきます
これも不便ですよね?
ですので、基本組み込みでは以下の変数を使います
| 型名 | 大きさ | 範囲 |
|---|---|---|
| uint8_t | 1byte | 0~255 |
| uint16_t | 2byte | 0~65535 |
| uint_32_t | 4byte | 0~約42億 |
| uint64_t | 8byte | 0~1845京 |
基本この4つだけでいいです
なるべく覚えることは少なくしたいので、必要になったらほかの変数も覚えていくといいでしょう
入れたい数値に対してなるべくぴったりな大きさの変数を選ぶようにしましょう
例:500という値を変数に格納したい場合 → uint8_tは最大値255を超えるので×
→ uint16_tなら最大値65535なのでOK
→ uint32_tなら最大値約42億なので大きすぎ×
変数の使い方
いろいろ書いてきましたが変数に値を格納することは、商品に値付けをする行為に似ていると思います
よく箱に値を入れるというたとえをする人がいますが、若干腑に落ちないところがあったので、このような表現にしました
変数から値を取り出すとかいった説明がよくあるのですが、箱として例えたとき、値を取り出した後の箱はどうなるの?といった疑問を聞くことがあります
その「取り出す」といった表現が私の受け持った生徒さんから取り出した後のことを聞かれたとき「値は残っているよ」と説明すると「???」となるみたいです
ようは箱から中身を取り出したのに、なぜ箱に中身が残っているのかといったことで、挫折してしまう方がおられました
閑話休題
では、実際に使っていく場合多どのようにするのかというと、下記のようになります
| 型名 | 変数名 | 記号 |
|---|---|---|
| uint8_t | number | ; |
つなげて書くと、下記のようになります
uint8_t number;
どういうことかというと、numberという名前の符号なし8ビット整数型を宣言しますということになります
変数名は何でも構いませんが、以下のものが予約語(プログラムですかうので駄目だよってことです)が禁止されています
| auto | break | case | char | const | continue | default | do |
| double | else | enum | extern | float | for | goto | if |
| int | long | register | return | short | signed | sizeof | static |
| struct | switch | typedef | union | unsigned | volatile | while | void |
しかし、変数に予約語を使ってもをコンパイルエラーとなるため、エラーを知ってから覚えればいいので、最初から全部覚えなくてもいいです
それよりも入力規則を覚えてもらいたいです
入力規則について
入力規則は守らなくても、プログラムは動きますし、エラーも起きません
しかし守らないと、人間にとって非常に解読しにくくなるため、ある意味最重要項目です
例えば「こんにちはきょうはすももとももをたべにいきますもももすももももものいっしゅといわれています」とか書かれたら、非常に読みにくいですよね?
これを「こんにちは、今日はスモモと桃を食べに行きます、桃もスモモも、桃の一種といわれています」と書けば、読みやすいですよね?
入力規則を守るとは、つまりこういうことです
では、入力規則の一例を紹介します
・適切なインデント(字下げ)をする
・変数等の名前は基本的にアルファベット小文字で書き、2単語以上並ぶ場合は「_」(アンダースコア)でつなぐ
といったところです、ほかにもたくさんありますが 、少しづつ覚えていきましょう
変数を使たプログラミング
さて、最後に変数を利用したプログラミングをして、次回にしたいと思います
#include<stdio.h>
#include<stdint.h>
int main(void){
uint8_t num1 = 8;
uint8_t num2 = 7;
uint8_t sum = num1 + num2;
puts("num1とnum2を足した結果は");
printf("%d\n", sum);
puts("です");
return 0;
}
実行結果は
num1とnum2を足した結果は
15
です
となっていると思います
このコードは、まずuint8_tという大きさの箱にそれぞれnum1.num2,sumとラベルを張り、その中にそれぞれ「8」「7」「num1 + num2の内容を足し算する」を入れますと指示をしています
その後、その結果をputs()とprintf()いう命令で出力を指示しています
少し説明が雑かなとは思いますが、理解できたでしょうか?
ほかにもいろいろルールはあるのですが、コードを書きながら覚えていってください