0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ゼロから始めるマイコン⑥-1

0
Last updated at Posted at 2025-11-15

変数について

 さて、前回書いた通り変数について話していきます
 とはいえ、普通の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単語以上並ぶ場合は「_」(アンダースコア)でつなぐ
といったところです、ほかにもたくさんありますが 、少しづつ覚えていきましょう

変数を使たプログラミング

 さて、最後に変数を利用したプログラミングをして、次回にしたいと思います

variable_value.c
#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()いう命令で出力を指示しています
 少し説明が雑かなとは思いますが、理解できたでしょうか?
 ほかにもいろいろルールはあるのですが、コードを書きながら覚えていってください

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?