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