Почему isdigit () возвращает 2048, если true?

Кто-нибудь может объяснить, почему isdigit вернуть 2048 если правда? Я новичок в ctype.h библиотека.

#include <stdio.h>
#include <ctype.h>
int main() {
char c = '9';
printf ("%d", isdigit(c));
return 0;
}

4

Решение

Потому что это разрешено. Стандарт 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 ...
22

Другие решения

Поскольку не существует стандартного документа для определения способа представления bool указанным числом, а для языка C ненулевое значение равно true, а ноль — false. так что это зависит от фактической реализации.

0