auの日記

プログラミング初心者の日記。(auはハンドルネームです)

VSコードのアプデをしたらヘッダファイルに緑色の波線がでるようになった

auです。
明日テストなので軽く書きたいと思います。
今日VSコードを立ち上げてみたのですが、画像のようにヘッダファイルに波線がでていて、メッセージには「#include errors detected. Please update your includePath. IntelliSense features for this translation unit (C:\Users\ユーザー名\Documents\cs2018_PL1\kimatu\test1.c) will be provided by the Tag Parser.」とでています。
f:id:program-shoshinsya:20180627230556p:plain

しかし、コンパイルなどはちゃんとでているので問題はない?とは思うのですが、検索してみても自分が思ったような解決策がでないので、もしわかる方がいたらコメントをお願いします。

ゼロパディングとは

auです。
今回はゼロパディングについて調べてみました。

ゼロパディングとは

パディング(padding)の意味は"詰める、埋める"という意味です。
12桁の数字を出力するプログラムがあるとします。
しかし、実際に表示したい数字は"39"の2桁とします。
これを12桁に表示する場合は"000000000039"となります。
このゼロを左から詰めて理想の桁数にすることを"ゼロパディング"といいます。

アラインメントとは

auです。
今回はアラインメントについて調べてみました。

アラインメントとは

align: 整列すること
アラインメントは"CPUが1度に処理できるデータサイズのこと"です。
1バイトは8ビットであるので、32ビットCPUでは4バイトのデータを一度で読み書きすることができます。この4バイトのことをワードといいます。
この特性を活かし、int型の4ビットを4バイトの始まりのところに配置することで効率的に処理をすることができます。「4バイトにアラインする(整列する)」という。
C言語でchar型とint型をそれぞれ宣言した場合、5バイトになる。
4ビットの場合
1 2 3 4 (ビット)
char | int | int | int
int | | |

となり、2回処理が行われてしまうため、非効率的である。
また、使用しているCPU、コンパイラによってアラインメントは変わってくるそうです。

エンディアンとは

auです。
今回はエンディアンについて調べました。
リトル・エンディアン、ビック・エンディアンがあって、バイトの並び順
関する用語ということだけは授業で軽く教わりました。

エンディアンとは

エンディアンとは、1バイト(半角の文字)ではなく、2バイト(日本語などのマルチバイト文字)のデータを記録や伝送をするときにバイトの並び方を決めることをエンディアンといいます。
例えば、0x11223344というデータがあったとして、これをメモリのアドレスに書き込むとします。
その際、一番大きいバイト(左側)から順にいれていくと
11
22
33
44
となり、この大きい順番から格納することを「ビッグ・エンディアン」といい、逆にいれていくことを「リトル・エンディアン」といいます。
なぜ大きい順、小さい順があるかというと、CPUによってビッグ・エンディアンかリトル・エンディアンか決まっているからです。

C言語の列挙型

auです。
今回は列挙型を扱う"enum"について調べてみました。

列挙型とは

例えば、月曜日~日曜日までがあったとします。

enum week {Mon, Tue, Wed, Thu, Fri, Sat, Sun};

月曜日を0、日曜日が7になるように、それぞれに整数値が振られていきます。

#include <stdio.h>

// 列挙型
enum week {
    Mon,
    Tue,
    Wed,
    Thu,
    Fri,
    Sat,
    Sun
};

int main(void) {
    enum week week;
    week = Mon;
    printf("Mon = %d\n", week);
    week = Tue;
    printf("Tue = %d\n", week);
    week = Wed;
    printf("Wed = %d\n", week);
    week = Thu;
    printf("Thu = %d\n", week);
    week = Fri;
    printf("Fri = %d\n", week);
    week = Sat;
    printf("Sat = %d\n", week);
    week = Sun;
    printf("Sun = %d\n", week);
    return 0;
}

// 実行結果
Mon = 0
Tue = 1
Wed = 2
Thu = 3
Fri = 4
Sat = 5
Sun = 6

それぞれ0から番号が振られていることが確認できました。
Switch case文でよく使われているそうです。

アキュムレータとは

auです。
授業受けるたびに意味を知らない単語ばかりでてついていけなくて焦ってます。
今回はアキュムレータについて調べてみました。

アキュムレータとは

アキュムレータとは演算装置によって計算された演算結果を累積するときに使うメモリのことです。
CPUとメモリの間で計算する際は、データをアキュムレータに移して保存します。計算する際はこのアキュムレータに一時的に入っているデータを経由して計算しているそうです。

色々調べてみましたが、理解できたところはこんなところでした。

スタックポインタとは

auです。
今回はスタックポインタについて調べました。
前回のスタックの知識を利用します。
program-shoshinsya.hatenablog.com

スタックポインタとは

スタックポインタとは、スタックで積み上げられた一番上のデータの次アドレスを保持するレジスタのことで、次に入れるデータのアドレスを指します。
スタックポインタは、新しいデータが追加されるとそのデータの次のアドレスを指すようになり、逆にデータが取り出されると一つ前のアドレスを指すようになります。