Как мне определить размер наименьшей единицы информации в C? - PullRequest
2 голосов
/ 27 марта 2011

В C есть оператор sizeof для определения размера байта данного типа данных или объекта.

Аналогично, есть CHAR_BIT из <limits.h>, который определен для отражения числабиты в байте.

Теперь это может быть немного гипотетически, но как мне определить количество различных значений, которые может хранить наименьшая единица информации, т. е. предоставляет ли среда хоста биты, trits, nats или что-то еще?.

Ответ

Очевидно, стандарт C предполагает, что среда хоста работает на битах.Такой бит требуется для хранения как минимум двух значений.

Известные предложения, возникшие из этого вопроса

Название наименьшей единицы информации троичноймашина: ТИТНазвание наименьшей единицы информации четвертичного автомата: QUIT

Ответы [ 3 ]

9 голосов
/ 27 марта 2011

Я думаю, что по определению бит - это двоичная цифра, которая должна быть равна нулю или единице, поэтому ответ всегда равен двум (бит равен 0 или 1).

РЕДАКТИРОВАТЬ: Отвечая на ваш новый вопрос, я считаю, что не существует стандартного способа сделать это.Спецификация C ISO (N1124, §3.5 / 1) определяет бит как

Единица хранения данных в среде выполнения, достаточно большая, чтобы содержать объект, который может содержать одно из двух значений.

Так как спецификация C пытается максимизировать переносимость языка, она не указывает, что немного выходит за рамки этой точки.Это означает, что изнутри C вы не можете сказать больше, чем это, о размере бита.

3 голосов
/ 27 марта 2011

Термин BIT является сокращением B -инарной цифры- IT , поэтому по определению он имеет ровно два возможных состояния.Нет никакой двусмысленности или реализации, определяемой поведением, только математическая уверенность.

1 голос
/ 27 марта 2011

Вы можете объявить структуру для хранения одного бита:

typedef struct _bit_t {
    int bit: 1;
} bit_t;

Ну, sizeof (bit_t) может получить 1 или 4 из-за выравнивания, я не уверен.

Как правило, байт должен быть наименьшим целочисленным типом. Вы должны всегда использовать байт для этой цели, чтобы сделать вашу программу переносимой. Если вас совсем не волнует переносимость, например, вы пишете программы 8051 или PIC, тогда вы можете просто использовать битовый тип, это никак не связано с байтом.

Чтобы объявить байт, вы можете смело объявить его как unsigned char, в настоящее время я не знаю ни одного компилятора C, чей char не является 8-битным. (Любое исключение? Я хотел бы услышать об этом.)

...