2011-01-10 3 views
1

Возможно ли хранить более байтового значения для символьного типа?Диапазон значений типа символа в C

Скажите, например, char c; и я хочу сохранить 1000 в c. можно ли это сделать?

+3

Почему вы хотите использовать 'char', так или иначе? 'short int 'даст вам 2 байта, и вы не сможете легко хранить 1000 в меньшем пространстве. – geoffspear

ответ

12

Технически, нет, вы не можете хранить больше байтного значения до типа char. В C a char и байт имеют одинаковый размер, но не обязательно ограничиваются 8 битами. Многие нормативные органы склонны использовать термин «октет» для точно 8-битного значения.

Если заглянуть внутрь limits.h (из памяти), вы увидите CHAR_BIT символ (среди других) говорит вам, сколько бит на самом деле используются для char и, если это достаточно большой, то да, он может хранить значение 1000.

+1

На практически всех настольных компьютерах, однако, символы имеют ровно 8 бит, и, учитывая возможность необычного размера байта в вашем коде, возможно, избыток. – user168715

+3

@ user168715: Некоторые из нас работают в больших универсумах, чем набор практически всех настольных компьютеров :-) – paxdiablo

+0

@ user168715: Я думаю, что речь идет о том, сколько усилий будет поддерживать его. Если это просто вопрос «CHAR_BIT» вместо '8', я делаю это. Если поддержка байтов разного размера будет фактически значительным расточительным усилием, я как-то (возможно, просто в документации) утверждаю, что CHAR_BIT должен быть 8 и продолжать свою жизнь. –

1

Наверное, нет. Стандарт C требует, чтобы char мог содержать не менее 8 бит, поэтому вы не можете зависеть от возможности сохранять значение более 8 бит в char портативно.

(* В наиболее часто используемых системах сегодня символы 8 бит).

5

Диапазон значений, которые вы можете сохранить в C-типе, зависит от его размера и не определяется C, это зависит от архитектуры. A char имеет минимум 8 бит. И обычно (почти повсеместно), что также является его максимальным (вы можете проверить его в своем limits.h). Следовательно, в символе вы сможете хранить от -128 до 127 или от 0 до 255 (подписанный или без знака).

4

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

+0

+1 для напоминания о том, что существуют такие вещи, как адресно-адресуемые архитектуры :-) –

0

Ширина 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 */ 
+0

Вы должны иметь в виду, что эти типы необходимы только в том случае, если реализация имеет типы, соответствующие спецификациям для них (что, довольно вероятно). Например, если нет 8-битного типа, 'uint8_t' не будет существовать. И если они действительно существуют, они гарантированно будут _быстро_ N бит шириной, а не «по крайней мере». Типы «по крайней мере» являются «int_leastN_t'. Если вы это исправите, я дам вам поднятие :-) – paxdiablo

Смежные вопросы