Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

  • "подписанный char" (-128-127) для большинства компиляторов (gcc, MSVC...)

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

Ответ 5

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

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

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