Это всегда один в C99, раздел 6.5.3.4:
Применительно к операнду, который имеет
введите char, unsigned char или подпись
символ (или его квалифицированная версия)
результат 1.
Редактировать: не часть вашего вопроса, но для интереса Харбисона и Стила, 3-е изд. (до c99) стр. 148
Единицей хранения считается
объем памяти, занимаемый одним
персонаж; размер объекта
поэтому тип char
равен 1.
Редактировать: В ответ на ваш обновленный вопрос уместны следующий вопрос и ответ от Харбисона и Стила (там же, пример 4 из главы 6):
Допустимо ли иметь C
реализация, в которой тип char
может
представлять значения в диапазоне от
От 2 147 483 648 до 2 147 483 647? Если так, то что будет sizeof(char)
в соответствии с этой реализацией? Что бы
быть самым маленьким и самым большим диапазоном
тип int
?
Ответ (там же, стр. 382):
Это разрешено (если расточительно) для
реализация использовать 32 бита для
представляют тип char
. Невзирая на
реализация, стоимость
sizeof(char)
всегда 1.
Хотя это конкретно не относится к случаю, когда, скажем, байты составляют 8 битов, а char
- это 4 из этих байтов (фактически невозможно с определением c99, см. Ниже), тот факт, что sizeof(char) = 1
всегда ясно из Стандарт С99 и Харбисон и Стил.
Редактировать: На самом деле (это ответ на ваш вопрос об обновлении 2), что касается c99 sizeof(char)
равно в байтах, снова из раздела 6.5.3.4:
Оператор sizeof возвращает размер
(в байтах) его операнда
в сочетании с приведенной выше цитатой, байты из 8 бит и char
как 4 из этих байтов невозможны: для c99 байт такой же, как char
.
В ответ на ваше упоминание о возможности 7 бит char
: это невозможно в c99. Согласно разделу 5.2.4.2.1 стандарта минимум равен 8:
Их значения, определяемые реализацией, должны быть равны или больше [мое выделение] по величине показанным с тем же знаком.
- количество бит для наименьшего объекта, который не является битовым полем (байт)
**CHAR_BIT 8**
- минимальное значение для объекта со знаком char
**SCHAR_MIN -127//−(27−1)**
- максимальное значение для объекта со знаком char
**SCHAR_MAX +127//27−1**
- максимальное значение для объекта типа unsigned char
**UCHAR_MAX 255//28−1**
- минимальное значение для объекта типа char
**CHAR_MIN** see below
- максимальное значение для объекта типа char
**CHAR_MAX** see below
[...]
Если значение объекта типа char
рассматривается как целое число со знаком, когда
используется в выражении, значение
CHAR_MIN должен совпадать с
SCHAR_MIN и значение CHAR_MAX
должны быть такими же, как у
SCHAR_MAX. В противном случае значение
CHAR_MIN должен быть 0, а значение
CHAR_MAX должен быть таким же, как
UCHAR_MAX. Значение UCHAR_MAX
должно быть равно 2 ^ CHAR_BIT - 1.