без знака char ограничено 127 на osx lion? - PullRequest
1 голос
/ 14 февраля 2012

Я сталкиваюсь со странной проблемой, работая на моем Mac OSX LION (в xcode4 / clang, хотя это воспроизводимо с gcc4.2).

Кажется, я не могу присвоить значение выше 127для переменной без знака.Поэтому, когда я присваиваю

v = (unsigned char) 156;

или просто

std::cout << (unsigned char) 231 << std::endl;

, моя программа не выдает никаких выходных данных.

Когда я запускаю этот код

std::cout << "Unsigned chars range up to " << UCHAR_MAX << std::endl;

Я получаю следующий вывод:

Диапазон неподписанных символов до 255

Однако, когда я запускаю что-то подобное, программа генерирует выходные данные до некоторого другого произвольного значения (такого какс = 114, с = 252 и т. д.) каждый раз.for (беззнаковый символ c = 0; c

Изменение программы CHAR_MAX на UCHAR_MAX, программазаканчивается снова без вывода: (

Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 14 февраля 2012

cout преобразует числовое значение в символ из набора символов (Ну, он пытается ... когда вы ничего не видите, это недопустимый символ для вашей кодировки, и технически это терминал, который решает этот).

Вместо этого приведите unsigned int.

Редактировать, чтобы добавить: ildjarn делает очень весомый комментарий в своем комментарии к вашему вопросу; если вы запустите это в отладчике, вы увидите, что значение действительно соответствует ожидаемому.

0 голосов
/ 14 февраля 2012

Значение unsigned char не ограничено 127, однако стандарт ASCII составляет всего 7 бит (т.е. 128 значений). Любое значение выше 127 не представляет какой-либо символ (если вы не используете какой-либо расширенный ASCII ), поэтому ничего не печатается.

0 голосов
/ 14 февраля 2012

Какой символ вы ожидаете увидеть для обозначения символа (unsigned char)231?В большинстве систем это расширенные символы, которые требуют специальных настроек терминала, чтобы они отображались как что-то связное, даже если они видимы.

Попробуйте:

unsigned char testChar = (unsigned char)231;
unsigned int testInt = (unsigned int)testChar;
std::cout << testInt << std::endl;
...