Хранение символьной константы в символьной переменной - PullRequest
1 голос
/ 14 октября 2010
char ch = 'a';

Здесь ch - символьная переменная, поэтому ее размер составляет один байт. «a» - это символьная константа, поэтому ее значение ASCII будет сохранено в 2 байта. Но как можно сохранить 2-байтовое значение в 1-байтовой переменной?

Ответы [ 4 ]

4 голосов
/ 14 октября 2010

Символьный литерал, такой как 'a', будет рассматриваться как целочисленный литерал, такой как 97 или 0x61. Компиляторы C, как правило, хотят, чтобы каждое целое число сохранялось в int, если не указано иное, поэтому sizeof('a'), вероятно, будет sizeof(int).

Тем не менее, вы должны заметить, что значение 'a' меньше 127, поэтому оно может быть сохранено в символе (который имеет максимальное значение 127 или 255 в зависимости от того, подписано оно или нет в вашем компиляторе ). Это то же самое, что иметь возможность:

unsigned long long x = 0;
unsigned int y = x;

y присваивается из x, тип которого больше, чем тип y, но значение x находится в пределах тех значений, которые может представлять y, поэтому данные не будут потеряны, когда старшие биты (все 0) обрезаются.

2 голосов
/ 14 октября 2010

Наряду с ответами других людей на этот вопрос можно найти более похожую информацию .

0 голосов
/ 17 июля 2012

Вы задали хороший вопрос. Я предлагаю вам сделать две вещи, чтобы убедиться, что для персонажа достаточно места:

1) Просмотрите документацию по getchar (), и вы увидите, что он возвращает целое число, поэтому места для хранения значения персонажа достаточно. Хорошо понять основы декларации, но если вы объявляете char cTestChar = 'c';, для хранения значения достаточно места.

2) Создание списка сборки при компиляции. Visual C / C ++ поддерживает это так же, как gcc. gcc использует опцию -Wa для генерации вывода сборки. Карта покажет распределение типов символов.

0 голосов
/ 14 октября 2010

Ну, символьная константа составляет всего один байт ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...