2017-01-19 7 views

ответ

7

'0' относится к печати символа 0, который в ASCII переводится на значение 48. '2' имеет значение 50, так вычитая 50 из 48 выходов 2, что начало текста символа. Этот символ не преобразуется в печатный символ, поэтому cout не печатает его.

2

Когда я печатаю 1, в этом случае он ничего не печатает.

См ASCII table, символа '2' является 0x32, и символ '0' является 0x30

a[1] = '2'; // a[1] is ASCII character 2 

a[1] = a[1] - '0'; // a[1] now is 2 (numeric) 

Он не печатает ничего, потому что ASCII код 2 является непечатаемыми кодами ASCII.

1

Его не 134

его 1+ (Специальный символ) +3 + 4

1234, поскольку в массив символов

a[1] = 2 

в полукокса становится

a[1] = 50 // The Ascii equivalent to a[1] 

' 0 'значение ascii составляет 48

так

a[1] = 50 - 48 

так [1] ​​становятся 2, которые могут или не могут быть напечатаны на экране.

0

когда ваш вход 1234

a[1]='2'

при вычитании '0' формы '2' вы получаете 2, которая является ASCII для начала текста так в основном а [1] = начало текста; который оленья кожа печати ничего на экране

поэтому значение = 1 34

1

ASCII-из «0» 48, здесь вы вычитанием с характером, а не числовым номером. И в своем коде вы вычитаем «0» с индексом 1 char a[100] массива так что вы получите а [1] = 50 - 48 который 2. 2 в полукокс ETX (конец текста), который не может быть представленный символом , так что вы получите вывод 134. Зависит от вашего компилятора, как он обрабатывает вывод. Некоторые компиляторы могут выдавать некоторые специальные символы.

+0

Это не имеет никакого отношения к вычитанию ** значений ASCII **. C и C++ требуют, чтобы коды для ''0' .. '9'' были непрерывными и увеличивались, поэтому' ch -' 0'' дает значение, представленное любой цифрой ''0' .. '9'', ** независимо от кодировки символов, которая используется **. ''2' - '0'' ** всегда ** 2. –