Возможно ли хранить более байтового значения для символьного типа?Диапазон значений типа символа в C
Скажите, например, char c;
и я хочу сохранить 1000 в c
. можно ли это сделать?
Возможно ли хранить более байтового значения для символьного типа?Диапазон значений типа символа в C
Скажите, например, char c;
и я хочу сохранить 1000 в c
. можно ли это сделать?
Технически, нет, вы не можете хранить больше байтного значения до типа char
. В C a char
и байт имеют одинаковый размер, но не обязательно ограничиваются 8 битами. Многие нормативные органы склонны использовать термин «октет» для точно 8-битного значения.
Если заглянуть внутрь limits.h
(из памяти), вы увидите CHAR_BIT
символ (среди других) говорит вам, сколько бит на самом деле используются для char
и, если это достаточно большой, то да, он может хранить значение 1000.
На практически всех настольных компьютерах, однако, символы имеют ровно 8 бит, и, учитывая возможность необычного размера байта в вашем коде, возможно, избыток. – user168715
@ user168715: Некоторые из нас работают в больших универсумах, чем набор практически всех настольных компьютеров :-) – paxdiablo
@ user168715: Я думаю, что речь идет о том, сколько усилий будет поддерживать его. Если это просто вопрос «CHAR_BIT» вместо '8', я делаю это. Если поддержка байтов разного размера будет фактически значительным расточительным усилием, я как-то (возможно, просто в документации) утверждаю, что CHAR_BIT должен быть 8 и продолжать свою жизнь. –
Включите limits.h
и проверьте значение CHAR_MAX
.
Наверное, нет. Стандарт C требует, чтобы char
мог содержать не менее 8 бит, поэтому вы не можете зависеть от возможности сохранять значение более 8 бит в char
портативно.
(* В наиболее часто используемых системах сегодня символы 8 бит).
Диапазон значений, которые вы можете сохранить в C-типе, зависит от его размера и не определяется C, это зависит от архитектуры. A char
имеет минимум 8 бит. И обычно (почти повсеместно), что также является его максимальным (вы можете проверить его в своем limits.h
). Следовательно, в символе вы сможете хранить от -128 до 127 или от 0 до 255 (подписанный или без знака).
Минимальный размер для char
в C - 8 бит, который недостаточно широк для хранения более 256 значений. Это может быть более широким в конкретной реализации, такой как архитектура, адресуемая по словам, но вы не должны полагаться на это.
+1 для напоминания о том, что существуют такие вещи, как адресно-адресуемые архитектуры :-) –
Ширина Char зависит от системы. Но, предполагая, что вы используете что-то разумно совместимое с C99, у вас должен быть доступ к заголовку stdint.h, который определяет типы форматов intN_t и uintN_t, где N = 8,16,32,64. Гарантируется, что они будут иметь ширину не менее N бит. Поэтому, если вы хотите быть уверенным, что у вас есть тип с определенным количеством бит (независимо от системы), это те парни, которых вы хотите.
Пример:
#include <stdint.h>
uint32_t foo; /* Unsigned, 32 bits */
int16_t bar; /* Signed, 16 bits */
Вы должны иметь в виду, что эти типы необходимы только в том случае, если реализация имеет типы, соответствующие спецификациям для них (что, довольно вероятно). Например, если нет 8-битного типа, 'uint8_t' не будет существовать. И если они действительно существуют, они гарантированно будут _быстро_ N бит шириной, а не «по крайней мере». Типы «по крайней мере» являются «int_leastN_t'. Если вы это исправите, я дам вам поднятие :-) – paxdiablo
Почему вы хотите использовать 'char', так или иначе? 'short int 'даст вам 2 байта, и вы не сможете легко хранить 1000 в меньшем пространстве. – geoffspear