диапазон для целочисленных значений символов в C++

constexpr подразумевает const, но в этом случае он применяет const к «неправильной вещи».

constexpr char*

в основном совпадает с

char * const

, который является постоянным указателем на неконстантный char. Это не сработает, потому что строковые литералы имеют тип const char[N], поэтому отбрасывают константность элементов массива.

constexpr const char*

, с другой стороны, в основном совпадает с

char const * const

, который является постоянным указателем на константу char, то есть то, что вы хотите, так как оно сохраняет константу элементов .

13
задан 108 4 November 2008 в 20:47
поделиться

5 ответов

Вы застреваете в дополнении two, думающем - стандарт C++ не определяет представление, используемое для отрицательных чисел!

Если Ваш компьютер (бог запрещают) использует дополнение для представления отрицательных чисел, у Вас есть диапазон-127 к + 127 в 8-разрядном байте. На позитивном аспекте у Вас есть два различных возможных представления для нуля...

Однако в реальном мире, Вы вряд ли встретите компьютер поразрядного дополнения до единицы.

16
ответ дан 1 December 2019 в 22:24
поделиться

Неправильно думать, что неподписанный символ колеблется от 0 до 255. это - только его минимальный диапазон. символ должен иметь по крайней мере 8 битов, и символ со знаком, неподписанный символ и сам символ могут иметь действительно больше это всего 8 битов. таким образом это означает, что неподписанный символ мог пойти вне 255. хотя по общему признанию, у меня нет реализации, где она имела больше чем 8 битов, это теоретически возможно. это указано в c89 стандарте (на который C++ 03 основания), документируя файл limits.h (CHAR_BIT, UCHAR_MAX, CHAR_MAX).

4
ответ дан 1 December 2019 в 22:24
поделиться

Спасибо Roddy и Esteban Brenes для полезных ответов.

Это - мое текущее понимание:

Существует три возможности. Если значения будут представлены как неподписанные, то символ будет колебаться от 0 до 255. Если значения будут представлены, как вошел в систему дополнение two, символ будет колебаться от-128 до 127. Наконец, если значения будут представлены, как вошел в систему поразрядное дополнение до единицы, символ будет колебаться от-127 до 127. Эта заключительная возможность предполагает, что только было бы 255 возможных значений в отличие от 256 возможных значений для первых двух реализаций, но этому не удается принять во внимание отрицательный нуль в представлениях поразрядного дополнения до единицы.

0
ответ дан 1 December 2019 в 22:24
поделиться

Типы символов в C и C++

От чтения этого кажется, что это может быть любой из тех, которые, в зависимости от реализации.

1
ответ дан 1 December 2019 в 22:24
поделиться

Поскольку в стандарте ничто не говорится о символьном типе, "символ" может быть:

  1. "неподписанный символ" (0-255) на некоторых компиляторах (пример: компилятор TexasInstruments для их процессоров ARM - серия OMAP)

  2. "символ со знаком" (-128-127) на большинстве компиляторов (gcc, MSVC...)

Для проверки у Вас всегда есть четко определенный диапазон, необходимо использовать "символ со знаком" или "неподписанный символ".

1
ответ дан 1 December 2019 в 22:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: