string c1 = "00011001"; // вот такая строка к примеру
c1[7] - '0' == ?
//и
c1[7] - '1' == ?
//и
c1[7] - 2 == ? // здесь 2 не как символ
Подскажите, пожалуйста, что получится в каждом варианте и почему.
Спецификации языков С и С++ не специфицируют конкретных значений для символьных литералов, но однако гарантируют, что символьные литералы '0', '1', '2', ..., '9' имеют последовательные целочисленные значения (именно в таком порядке). Поэтому, например, значение выражения '5' - '0' гарантированно равно 5.
В вашем случае c1[7] равно '1' и по этой причине
c1[7] - '0' == 1
c1[7] - '1' == 0
Чему именно равно c1[7] - 2 сказать невозможно, ибо, как сказано выше, никаких конкретных значений для этих констант спецификация языка не оговаривает. Это зависит от конкретной платформы. Можно лишь сказать, что c1[7] - 2 равно '0' - 1. (Придушенный голос из зала - "Сорок семь" - вызывает лишь снисходительную ухмылку с моей стороны.)
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости