true の場合isdigit
に返される理由を説明できる人はいますか? 2048
私はctype.h
図書館が初めてです。
#include <stdio.h>
#include <ctype.h>
int main() {
char c = '9';
printf ("%d", isdigit(c));
return 0;
}
許されるからです。C99 標準ではisdigit
、isalpha
、 などについて次のように述べています。
この節の関数は、引数の値が関数の説明の値と一致する場合に限り、ゼロ以外 (true) を返します。
c
なぜそれが実際に起こっているのかについては、私にはわかりません。推測では、すべての関数で共有されるルックアップ テーブルを使用しis*
、特定のビット位置以外をすべてマスクしています。例えば:
static const int table[256] = { ... };
// ... etc ...
int isalpha(char c) { return table[c] & 1024; }
int isdigit(char c) { return table[c] & 2048; }
// ... etc ...
bool を指定数で表現する方法を定義する標準文書がなく、C 言語では非ゼロが真、ゼロが偽であるためです。したがって、実際の実装に依存します。