CS - 第 4 週

Barbara Streisand
Barbara Streisandオリジナル
2024-12-31 18:24:10716ブラウズ

ピクセル

ピクセル は、画像を構成する最小の色のドットです。
画像が 0 と 1 で構成されていると想像すると、0 は黒を表し、1 は白を表します。

CS- Week 4

RGB (赤、緑、青)は各色の量を表す数値です。 Adobe Photoshop では、次の設定が表示されます:

CS- Week 4

上の画像では、赤、緑、青の選択量によって色がどのように変化するかがわかります。この画像では、色が 3 つの値だけで表されるのではなく、特別な数字と記号で構成される値によって表されることもわかります。たとえば、値 255 は FF として表されます。


16進数

16 進数体系 は、わずか 16 文字を使用して数値を記述することに基づいた記数体系です。それらは次のとおりです:

0 1 2 3 4 5 6 7 8 9 A B C D E F

16 進数体系では、各列は 16 レベルを表します。
0 – 00 として
1 – 01 を
として 9 – 09
として 10 – 0A
として 15 – 0F
として 16 – 10 として
16 x 15 (または F) は 240 に 15 を足して 255 になるため、255 は FF で表されます。これは、16 進数で表現できる最大の 2 桁の数値です。

16 進数システムを使用すると、データを短い形式で表現できます。したがって、情報をよりコンパクトに表現するのに便利です。


メモリ

16 進数システムを使用してメモリ ブロックに番号を付けると、次のように想像できます。

CS- Week 4

図のブロック 10 がメモリ位置を表しているのか、それとも値 10 を表しているのかを判断するのは難しい場合があります。したがって、通常、すべての 16 進数は接頭辞 0x:

で表されます。

CS- Week 4

整数変数 n に値 50 を代入します。

#include <stdio.h>

int main(void)
{
    int n = 50;
    printf("%i\n", n);
}

プログラムがこの値をメモリに格納する方法は、次のように視覚化できます。

CS- Week 4

C 言語には次のメモリ操作演算子があります:

  • & – メモリ内の値のアドレスを与えます。
  • * – メモリ位置に移動するようにコンパイラに指示します。

n 学習器のメモリ アドレスを知りたい場合は、上記のコードを次のように変更できます。

0 1 2 3 4 5 6 7 8 9 A B C D E F

%p – メモリ位置のアドレスを確認できます。そして、コードを実行すると、&n は 0x で始まるメモリ内の変数 n のアドレスを返します。


ポインタ

ポインタ は、コンピュータ メモリ内のこの値のアドレスを格納する変数です。

#include <stdio.h>

int main(void)
{
    int n = 50;
    printf("%i\n", n);
}

ここで、p は整数 n のアドレスを含むポインターです。

CS- Week 4

ポインタは通常、8 バイトの値として格納されます。上の画像では、p には値 50 のアドレスが格納されています。
ポインタは、メモリ内のある場所から別の場所を指す矢印と考えることができます。

CS- Week 4


String は単なる文字の配列です。たとえば、文字列 s = "HI!" は、コンピューターのメモリでは次のように表現できます。

CS- Week 4

s と呼ばれるポインターは、指定された値の最初のバイトがどこにあるかをコンパイラーに伝えます。

CS- Week 4 次のように

文字列変数を作成できます:


#include <stdio.h>

int main(void)
{
    int n = 50;
    printf("%p\n", &n);
}
上記のコードは、位置 s から始まる文字の配列を出力します。


文字列の比較

文字列データ型の変数値を相互に比較します:


int n = 50;
int *p = &n;
上記のコードでは、変数 s と t に同じ「Hi!」を与えています。値を指定した場合でも、結果として「異なる」メッセージが画面に表示されます。

なぜこれが起こるのかを調べるには、変数 s と t に同じ値を与え、次のようにコンピューターのメモリ内でそれらを表すことができます。

CS- Week 4

したがって、上記のコードは実際には、変数 s と t の値ではなく、変数 s と t のメモリ位置を比較しようとしています。


コピーする

次のコードを与えてみましょう:


#include <stdio.h>

int main(void)
{
    char *s = "HI!";
    printf("%s\n", s);
}
string t = s では、s のアドレスが t にコピーされます。値はコピーされず、アドレスのみがコピーされるため、これでは期待する結果は得られません。

CS- Week 4

s と t は同じメモリ ブロックを指します。その値を s から t にコピーすることはできず、代わりに、それらは 1 つの文字列を指す 2 つのポインターになりました。

malloc - プログラマが特定のサイズのメモリ ブロックを割り当てることができます。
free – 以前に割り当てられたメモリ ブロックを解放するようにコンピューターに要求します。
コードを変更して実際のコピーを作成します。

0 1 2 3 4 5 6 7 8 9 A B C D E F

malloc(strlen(s) 1) - 変数 s の長さに 1 を加え、その文字にスペースを割り当てます。次に、for ループを通じて s の値が t にコピーされます。


ガベージ値

コンパイラにメモリのブロックを要求した場合、このメモリが解放されるという保証はありません。割り当てられたメモリは以前にコンピューターによって使用されていた可能性があるため、不要な値が存在する可能性があります:

CS- Week 4

#include <stdio.h>

int main(void)
{
    int n = 50;
    printf("%i\n", n);
}

このコードを実行すると、1024 個のメモリ位置が配列に割り当てられますが、for ループを使用して配列要素の値を表示すると、すべてが 0 ではないことがわかります。

コンピュータに変数にメモリを割り当てるように依頼するときは、変数を 0 または他の値に初期化することをお勧めします。

この記事では CS50x 2024 のソースを使用しています。

以上がCS - 第 4 週の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。