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

Я читаю язык программирования C ++ и в нем Stroustrup утверждает, что значение int char может варьироваться от 0 до 255 или от -127 до 127, в зависимости от реализации. Это правильно? Кажется, он должен быть от -128 до 127. Если нет, то почему их единственные 255 возможных значений во второй возможности реализации, а не 256.

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

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

Тем не менее, в реальном мире вы вряд ли встретите компьютер дополнений .

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

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

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

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

  1. «unsigned char» (0-255) для некоторых компиляторов (пример: компилятор TexasInstruments для своих процессоров ARM – серия OMAP)

  2. «signed char» (-128-127) для большинства компиляторов (gcc, MSVC …)

Чтобы убедиться, что у вас всегда есть определенный диапазон, вы должны использовать «подписанный символ» или «unsigned char».

Спасибо Родди и Эстебан Бренес за полезные ответы.

Это мое настоящее понимание:

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