Компьютеры могут понимать только цифры, поэтому символ на клавиатуре (и другие) представлены с использованием системы кодирования , где каждый символ присваивается уникальный номер.
Строки представляют собой последовательности символов, где, как мы сказали, каждый символ представлен числом. В случае, когда представление символа (например, ASCII) включает в себя выравнивание цифр '0'
по 9
последовательно начиная с '0'
.
Если у вас есть символ, цифра, вычитая '0'
«преобразует» его это цифра значение, поскольку выражение в вашем случае:
w = static_cast<int>(my_str[0]) - 48;
выполняет вычитание между числами int
представляющие значения символов. Где десятичное значение: 48
однозначно представляет символ '0'
.
static_cast<int>
является излишним, поскольку вся правая часть состоит из целых чисел
Примечания: вычитание '0'
старый трюк для преобразования используемых людей, которые действительно знали, что компьютеры были всеми о, в отличии от нас.
1. Пример стандарта кодирования является ASCII.
2. '0'
in ASCII = 48
// in Decimal.
P.S .: Вопрос был бы еще лучше, если номер 42
был ASCII код Числовое представление '0'
, то каждый ответ был бы очень интересно читать.
Тот факт, что @Marvin отредактировал этот вопрос, и '48' настолько близок к' 42', меня очень забавляет :) – Ziezi
'my_str [0]' будет возвращать 'char', поэтому его включение в int излишний. –