2014-11-05 2 views
-3

У меня проблема с пониманием «2» и «2». Я знаю, что «2» - это char, а «2» - char *, но что меня смутило что если я делаю это:В чем разница между «2» и «2» в C++

String input = "123"; 
int number = input[1]; //extract 2 from input 

, но это дает мне, что число равно 50.How это может преобразовать «2» до 50? Это то, о чем я смущаюсь. Кто-нибудь знает, почему? благодаря!

+6

http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters – user657267

+0

Вы должны иметь некоторое числовое значение который указывает текстовый символ «2». 50 так же хорош, как и любой другой. –

+0

@ Theolodis. У него просто нет идеи о том, как использовать char для трансляции и преобразования ASCII, в противном случае это законный вопрос для новичка. – Erfan

ответ

1

'2' является символом буквальным. Он занимает один байт и его внутренний код ASCII 50. Таким образом, в этом заявлении

int number = input[1]; 

значение символа input[1] присваивается номер.

Рассмотрим, например

char c = '2'; 

std::cout << (int)c << std::endl; 

"2" является строковым. Он имеет тип const char[2], потому что он включает в себя завершающий нуль.

Вы не можете написать

char c = "2"; 

Но вы можете написать

char c = "2"[0]; 
std::cout << (int)c << std::endl; 

и вы получите тот же результат, что и выше.

0

Когда вы используете input[1], вы извлекаете второй символ входной строки. В этом случае '2'. Затем вы производите этот символ переменной int, которая приводит к преобразованию ASCII символа '2'. Число 50 является преобразованием символа ASCII '2'

0

Что делает ваш код, он извлекает второй элемент в строке, который является символом '2' и неявно отбрасывает его в целое число. Результатом является код ASCII для символа «2», который равен 50.

0

Машины не знают о человеческих концепциях, таких как «S», «4», «красный», «маленький». Они знают только о числах, и поэтому все эти понятия должны быть представлены как число. Когда инженеры начали переводить человеческие концепции в мир машин, им нужно присвоить им стандартный номер. Например, число 0 было использовано для представления конца строкового буфера. Число 10 было использовано для представления символа линии, что делает разрыв текста в нескольких строках. Человеческому понятию «4» (скорее, его графическому представлению) присвоен номер 50. Все эти присвоения чисел графическим символам известны как таблица ASCII.

Ваш код, то становится числовое представление символа «4», который является 50.