2016-02-07 1 views
-5

Это мое домашнее задание на C++, пожалуйста, помогите мне. (Я уже гугле его и ничего не нашли)C++ показывает '123', 3224115 на выходе (с использованием cout)

int main() 
{ 
    std::cout<<'123'; 
    getchar(); 
    return 0; 
} 

на выходе вы получите 3224115. почему?

+6

Вы используете неправильные цитаты. 'для одного символа, а не для строки. Используйте двойную кавычку «для строки». Std :: cout << «123»; ' – drescherjm

+0

Я знаю. Вопрос в том, что именно я написал. –

+0

Посмотрите на шестнадцатеричное представление 3224115. Затем загляните в таблицу ASCII для шестнадцатеричного представление цифр. – molbdnilo

ответ

2

Написать вместо

std::cout << "123"; 
      ^^

'123' является литерой, что имеет определенное значение реализации и типа int.

Это может быть, например, представить себе следующим образом

#include <iostream> 

int main() 
{ 
    int x = 0x313233; 

    std::cout << x << std::endl; 

    return 0; 
} 

где 0x31, 0x32, 0x33 являются ASCII коды символов '1', '2', '3' соответственно.

По этой программе выход может быть

3224115 
+0

Я не должен менять одну цитату. Мне нужно выяснить почему я получаю этот номер в статике. –

+0

@PaladinVahid Поскольку я написал многобайтовый символьный литерал, имеет тип int. Его значение определяется реализацией –

+0

Я думаю, вы упустили понятый вопрос. Вопрос в том, почему мы получаем это число, а не то, что неправильно с код –

0

Цитируя C standard (стр 61)

Значение константы числа символов, содержащую более одного характера (например, 'ab'), или содержащий символ или escape-последовательность , которая не соответствует однобайтовому символу выполнения, равна .

+0

Я думаю, вы пропустили поняли вопрос. вопрос в том, почему мы получаем это число, а не то, что не так с кодом. –

+0

Мне нужно знать, почему «123» показало 3224115 компилятором. –

+0

Отредактировано, чтобы показать, почему одиночные кавычки не работают – stackptr