K&R1.6配列//配列構造の数字表現

五月

このサンプルコードは、C言語での配列の使用に関するものです。

#include <stdio.h>

main () {
    int c, i;
    int ndigit[10];

for (i = 0; i < 10; ++i)
    ndigit[i]=0;

while ((c = getchar()) != EOF)
    if (c >= '0' && c <= '9')
        ++ndigit[c - '0'];

printf("digits =");
for (i = 0; i < 10; ++i)
    printf(" %d", ndigit[i]);
}

私はこれまで配列を見たことがありませんでしたが、私はそれを手に入れたと思います。それでも、なぜ数字を挿入'..'する必要があるのか​​、またはの割り当てをiとして表現する必要があるのかはわかりませんc-'0'

これは私の疑問を明確にするはずの本の一節です:

この特定のプログラムは、数字の文字表現のプロパティに依存しています。たとえば、テキストif (c >= '0' && c <= '9')、の文字cが数字あるかどうかを決定しますの場合、その桁の場合の数値はc - '0'です

これらの値が文字の場合、算術式でどのように使用できるのかわかりませんが、数値にマッピングされているためですか?

そして、彼らはのように数字として書かれている場合は、プログラム全体だけでは動作しない理由if (c >= 0 && c <= 9)もそれがあれば動作しますc(私の理解にどんな数」だけである、そのように書かれていないcマイナス0)。

限目

TL; DR:「char」は1バイト長の整数です。

これらの値が文字の場合、算術式でどのように使用できるのかわかりませんが、数値にマッピングされているためですか?

Cでは、charは「基本文字セットを含めることができるマシンのアドレス可能な最小単位です。整数型です」。[1]。通常、charは「1バイト長の整数」と同等であるため、0から(2 ^ 8)-1、または[0,255]までの値を保持できます。

そうは言っても、あなたが書くとき

char c = '9';

「cは1バイト長の整数であり、その値は文字9の文字セット表現です」と言っています。最も一般的な文字セットであるASCIIテーブル[2]を見ると、文字9の整数値が57であることがわかります。したがって、上記の式は次のようになります。

char c = 57;

数字の文字セット値を数字自体に変換するには(たとえば、「9」から9、または57から9)、数字が常に順次かつ増加して格納され、値を減算するだけの文字セットのプロパティに依存できます。 '0'の、ASCIIでは48なので、次のようになります。

char c;
c = '9' - '0'; /* = 9 In any character set */
c = 57 - 48;   /* = 9 */
c = '9' - 48;  /* = 9 In ASCII */
c = 57 - '0';  /* = 9 In ASCII */

ASCIIが最も一般的な文字セットですが、これは実際にはマシンに依存することに注意してください。

[1] http://en.wikipedia.org/wiki/C_data_types#Basic_types

[2] http://www.asciitable.com/

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Rスタジオの配列構造

分類Dev

C ++で1つの構造体配列の値を別の構造体配列にコピーする方法

分類Dev

asn.1を使用した構造体の配列

分類Dev

std :: transformを使用して、構造体の1つの配列を別の配列にコピーします

分類Dev

3 つの個別の辞書配列を 1 つの構造体配列に変換しますか?

分類Dev

2 つの float 配列を c の 1 つの構造体配列にマージする方法

分類Dev

サイズ1の配列と構造体へのポインタ

分類Dev

サイズ1の配列と構造体へのポインタ

分類Dev

Scala:2つの配列を1つの単一構造にマージ

分類Dev

glGetUniformLocationは、GLSLの構造体の配列に対して-1を返します

分類Dev

構造体の1D配列を動的に割り当てる:2つの方法

分類Dev

Table1の構造体の配列をBigQueryのテーブル2の通常の列と結合する方法

分類Dev

R:動的サイズの配列を使用して線形モデルを構築するループ構造

分類Dev

配列内の複数の特定の構造体から1つのプロパティをプルします

分類Dev

Pointのベクトルとintのベクトルを1つの配列の構造に保持します

分類Dev

構造体の配列の1つの要素を削除する方法はありますか?

分類Dev

intの配列とintが1つしかない構造体の配列で使用されるメモリは同等ですか?

分類Dev

c ++は構造体の配列内のchar配列に1行ずつatxtファイルを読み取ります

分類Dev

json構造体配列の1つのプロパティをマーシャリング

分類Dev

(Julia 1.x)構造体の配列インデックスの値を設定します

分類Dev

Python:1と0の配列から構造の面積と周囲長を計算します

分類Dev

ddk構造で1つの要素の配列を使用する意味は何ですか?

分類Dev

regmatch_t配列の未使用の構造要素は-1ではありません

分類Dev

構造体のメンバー変数の1つを使用して、構造体内の配列の長さを割り当てることは機能しますか?

分類Dev

構造体が配列として存在する場合、その構造体から1つの変数のみを送信することは可能ですか?

分類Dev

1つの配列をメンバーとして持つ構造体に配列をキャストしても安全ですか?

分類Dev

新しい構造体を作成し、1対多の関係で配列に追加します

分類Dev

構造を壊すことなく、2つの連想配列を1つにマージします

分類Dev

1回の操作で宣言した後、構造体に配列を入力する最も簡単な方法

Related 関連記事

  1. 1

    Rスタジオの配列構造

  2. 2

    C ++で1つの構造体配列の値を別の構造体配列にコピーする方法

  3. 3

    asn.1を使用した構造体の配列

  4. 4

    std :: transformを使用して、構造体の1つの配列を別の配列にコピーします

  5. 5

    3 つの個別の辞書配列を 1 つの構造体配列に変換しますか?

  6. 6

    2 つの float 配列を c の 1 つの構造体配列にマージする方法

  7. 7

    サイズ1の配列と構造体へのポインタ

  8. 8

    サイズ1の配列と構造体へのポインタ

  9. 9

    Scala:2つの配列を1つの単一構造にマージ

  10. 10

    glGetUniformLocationは、GLSLの構造体の配列に対して-1を返します

  11. 11

    構造体の1D配列を動的に割り当てる:2つの方法

  12. 12

    Table1の構造体の配列をBigQueryのテーブル2の通常の列と結合する方法

  13. 13

    R:動的サイズの配列を使用して線形モデルを構築するループ構造

  14. 14

    配列内の複数の特定の構造体から1つのプロパティをプルします

  15. 15

    Pointのベクトルとintのベクトルを1つの配列の構造に保持します

  16. 16

    構造体の配列の1つの要素を削除する方法はありますか?

  17. 17

    intの配列とintが1つしかない構造体の配列で使用されるメモリは同等ですか?

  18. 18

    c ++は構造体の配列内のchar配列に1行ずつatxtファイルを読み取ります

  19. 19

    json構造体配列の1つのプロパティをマーシャリング

  20. 20

    (Julia 1.x)構造体の配列インデックスの値を設定します

  21. 21

    Python:1と0の配列から構造の面積と周囲長を計算します

  22. 22

    ddk構造で1つの要素の配列を使用する意味は何ですか?

  23. 23

    regmatch_t配列の未使用の構造要素は-1ではありません

  24. 24

    構造体のメンバー変数の1つを使用して、構造体内の配列の長さを割り当てることは機能しますか?

  25. 25

    構造体が配列として存在する場合、その構造体から1つの変数のみを送信することは可能ですか?

  26. 26

    1つの配列をメンバーとして持つ構造体に配列をキャストしても安全ですか?

  27. 27

    新しい構造体を作成し、1対多の関係で配列に追加します

  28. 28

    構造を壊すことなく、2つの連想配列を1つにマージします

  29. 29

    1回の操作で宣言した後、構造体に配列を入力する最も簡単な方法

ホットタグ

アーカイブ