char c = 5 + '0'; почему работает?)
От: Аноним  
Дата: 28.04.07 10:12
Оценка:
Здраствуйте, мне нужно было преобразовать int в char нашел сабж пример тут, а вот почему он работает понять не могу, если убрать нуль в конце, то работает не коректно, прокоментируйте пожалуйста этот пример,

заранее спасибо
Re: char c = 5 + '0'; почему работает?)
От: Kemsky  
Дата: 28.04.07 10:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здраствуйте, мне нужно было преобразовать int в char нашел сабж пример тут, а вот почему он работает понять не могу, если убрать нуль в конце, то работает не коректно, прокоментируйте пожалуйста этот пример,


'0' — это 48
Re: char c = 5 + '0'; почему работает?)
От: Roman Odaisky Украина  
Дата: 28.04.07 10:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здраствуйте, мне нужно было преобразовать int в char нашел сабж пример тут, а вот почему он работает понять не могу, если убрать нуль в конце, то работает не коректно, прокоментируйте пожалуйста этот пример,


'что-нибудь' в C/C++ можно считать просто целочисленной константой. Как будто бы символ «'» не имел в языке особого значения и было написано так:

. . .
char const ' ' = 32;
char const '!' = 33;
char const '"' = 34;
char const '#' = 35;
. . .
char const '0' = 48;
char const '1' = 49;
char const '2' = 50;
char const '3' = 51;
char const '4' = 52;
char const '5' = 53;
char const '6' = 54;
char const '7' = 55;
char const '8' = 56;
char const '9' = 57;
. . .
char const 'A' = 65;
char const 'B' = 66;
. . .

(в ASCII так, на экзотических платформах коды могут быть другими)

Тип char не имеет никаких «магических» свойств, это просто целочисленный тип. Другое дело, что средства ввода/вывода обычно выводят значения типа char не как число, а как символ, соответствующий ему.

Вот и получается, что '0' + 5 = 48 + 5 = 53 = '5'.
До последнего не верил в пирамиду Лебедева.
Re: char c = 5 + '0'; почему работает?)
От: Кодт Россия  
Дата: 28.04.07 13:09
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здраствуйте, мне нужно было преобразовать int в char нашел сабж пример тут, а вот почему он работает понять не могу, если убрать нуль в конце, то работает не коректно, прокоментируйте пожалуйста этот пример,


Тебе, наверное, из числа 5 нужно получить символ '5'?
Символы — тоже числа.
(char)5 — это, кажется, ETX или какой-то ещё управляющий символ. Поэтому такой фокус и не проходит.
А поскольку цифры идут подряд, '0', '1', ..., '9', то получается, что
'0' = '0'+0
'1' = '0'+1
...
'9' = '0'+9
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.