Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.95
jerdeks
1 / 1 / 0
Регистрация: 19.04.2009
Сообщений: 13
#1

Что такое ' ' (апострофы) - C++

16.08.2011, 19:52. Просмотров 3198. Ответов 22
Метки нет (Все метки)

Да, я знаю что
C++
1
char c = '1'; // == 48
А вот что такое '1234' и почему нельзя '12345'?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2011, 19:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что такое ' ' (апострофы) (C++):

Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами? - C++
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?

Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа? - C++
Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?

Что такое хэндлер файла? Что такое файловый указатель? - C++
Что такое хэндлер файла? Что такое файловый указатель?

Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них - C++
Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них пожалуйста.

Объяснить что такое "раздельная компиляция", что такое "интерфейс класса" и "реализация класса" на примере - C++
Есть класс, содержащий объекты и конструктор. Конструктор объявляется в одном из cpp файлов(их несколько). Можно ли, как-то, использовать...

Кавычки и апострофы - C++
Кавычки и апострофы в C++ работают как и в пхп? Кавычки- весь внутренний код прогоняется как программный, затем образуется строка. ...

22
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
16.08.2011, 19:55 #2
В символах апострофа заключают символьные литералы (т.е. один однобайтовый символ)
char c = '1' - можно.
char c = '1234' - нельзя!
char c = '12345' - тоже нельзя!.
1234 - это строковый литерал (т.е. строка символов). Его заключают в двойные кавычки.
0
Сыроежка
Заблокирован
16.08.2011, 19:57 #3
Цитата Сообщение от jerdeks Посмотреть сообщение
Да, я знаю что
C++
1
char c = '1'; // == 48
А вот что такое '1234' и почему нельзя '12345'?
Честно говоря, так как нет под рукой стандарта, то придется говорить по памяти. Не помню, как в С++, но в С типом символьного литерала является целое число. То есть символьный литерал '1234' - это целое число.

Например,

C++
1
int x = '1234';

Это корректная запись. А при присвоении '12345' происходит потеря значения, поэтому наверное и выдает ошибку. Если бы у меня под рукой был стандарт, я бы вам точнее ответил.

Добавлено через 1 минуту
Цитата Сообщение от Nameless One Посмотреть сообщение
В символах апострофа заключают символьные литералы (т.е. один символ!)
1234 - это строковый литерал. Его заключают в двойные кавычки.
Вы не правы! Это не строковый литерал, а символьный литерал, имеющий тип
C++
1
int
. По крайней мере так в языке С.
1
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
16.08.2011, 20:01 #4
Цитата Сообщение от Сыроежка Посмотреть сообщение
Вы не правы! Это не строковый литерал, а символьный литерал, имеющий тип
Да, извиняюсь, в данном случае это будет многознаковая символьная константа.
0
KuKu
16.08.2011, 20:04
  #5

Не по теме:

Чет давненько то не был, в какую тему не зайду - везде вы доказываете, что кто-то не прав

0
jerdeks
1 / 1 / 0
Регистрация: 19.04.2009
Сообщений: 13
16.08.2011, 20:04  [ТС] #6
Кстати, в инт записывается наоборот, не 1234, а 4321. И вот ещё что интересно. В Си можно написать хоть 'dfskhjdgrfohidgfsobhidgfdgfuohidgfs' - будет только варнинг, что "слишком много для данного типа", а в Си++ больше 4х символов - генерирует ошибку, с текстом почти как сишный варнинг
0
Nameless One
16.08.2011, 20:06
  #7

Не по теме:

Цитата Сообщение от KuKu Посмотреть сообщение
Чет давненько то не был, в какую тему не зайду - везде вы доказываете, что кто-то не прав
ну так это ж хорошо главное только чтобы доказывали с аргументами, а не так, как у нас часто бывает, - с пеной у рта

0
Сыроежка
Заблокирован
16.08.2011, 20:07 #8
Цитата Сообщение от jerdeks Посмотреть сообщение
Кстати, в инт записывается наоборот, не 1234, а 4321. И вот ещё что интересно. В Си можно написать хоть 'dfskhjdgrfohidgfsobhidgfdgfuohidgfs' - будет только варнинг, что "слишком много для данного типа", а в Си++ больше 4х символов - генерирует ошибку, с текстом почти как сишный варнинг
Это не обязательно, что '1234' будет представлено в памяти как 4321. Это зависит от представления чисел в памяти, так наызваемых little indian и big indian форматов.

Да, между С и С++ есть существенные различия. Например, в С следующая запись
C++
1
char s[3] = "ABC";
корректная, в то время как в С++ такая запись

C++
1
char s[3] = "ABC";
не корректная. В С++ должно быть

C++
1
char s[4] = "ABC";
То есть в С++ размер массива должен равняться не 3, а 4.
0
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,232
16.08.2011, 20:13 #9
Цитата Сообщение от jerdeks Посмотреть сообщение
Кстати, в инт записывается наоборот, не 1234, а 4321
и не то и не другое '1'=0x31 и т.д
порядок поменятся в памяти а в переменной нет
0
Миниатюры
Что такое ' ' (апострофы)  
grizlik78
Эксперт С++
1970 / 1463 / 122
Регистрация: 29.05.2011
Сообщений: 3,029
16.08.2011, 20:16 #10
Цитата Сообщение от Сыроежка Посмотреть сообщение
так наызваемых little indian и big indian
Маленький и большой индийский? Это как-нибудь связано с индусами? Шутка.
1
jerdeks
1 / 1 / 0
Регистрация: 19.04.2009
Сообщений: 13
16.08.2011, 20:19  [ТС] #11
Цитата Сообщение от Сыроежка Посмотреть сообщение
Это не обязательно, что '1234' будет представлено в памяти как 4321. Это зависит от представления чисел в памяти, так наызваемых little indian и big indian форматов.
Угу.
Но с огроменными символьными литералами в си так и не понял.

Добавлено через 2 минуты
ValeryS, ну да-да, правильно. Я-то именно в памяти смотрел:
C++
1
2
3
4
int x = '1234';
    for (int i = 0; i < 4; i++)
        cout << *((char*)&x + i) << '\t';
    // 4  3  2  1
0
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,232
16.08.2011, 21:16 #12
самое главное не это
смотри сркиншот
при int a='1234'
в переменную запишется
i=0x31323334
т.е в переменной будут HEX значения символов
0
jerdeks
1 / 1 / 0
Регистрация: 19.04.2009
Сообщений: 13
16.08.2011, 22:12  [ТС] #13
ValeryS, это-то ясно
0
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,385
Записей в блоге: 2
Завершенные тесты: 1
16.08.2011, 22:25 #14
Цитата Сообщение от jerdeks Посмотреть сообщение
ValeryS, ну да-да, правильно. Я-то именно в памяти смотрел:
C++
1
2
3
4
 int x = '1234';
 for (int i = 0; i < 4; i++)
 cout << *((char*)&x + i) << '\t';
 // 4 3 2 1
Дело в том, что например число 0x1234, будет хранится в памяти как 0x4321. На первый взгляд кажется бред, но на самом деле все логично - младший байт хранится по младшему адресу, старший - по старшему.
0
grizlik78
Эксперт С++
1970 / 1463 / 122
Регистрация: 29.05.2011
Сообщений: 3,029
17.08.2011, 00:07 #15
Цитата Сообщение от Kastaneda Посмотреть сообщение
Дело в том, что например число 0x1234, будет хранится в памяти как 0x4321.
Тогда уж как 0x34, 0x12. Всё-таки 8 бит это 2 шестнадцатиричные цифры, да и объединять их тогда не стоит, а то снова 0x1234 получиться должно. Но '1234' это не 0x1234, это 0x31323334, то есть, в little-endian, последовательность байт 0x34, 0x33, 0x32, 0x31.
0
17.08.2011, 00:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2011, 00:07
Привет! Вот еще темы с ответами:

Апострофы в условии - C++
Доброго времени, вопрос следующий: Как, в условии if сравнивать символы с апострофом? я никак не могу понять как его обозначить Заранее...

Что такое перегрузка оператора? Что у меня в коде за ошибка? - C++
Что же я написал?? Что оно не компилится? Что значит error C2275: Superclass: недопустимое использование этого типа в качестве выражения ...

В этой части кода происходит объявление функций? Что такое void? Что в скобках? - C++
В этой части кода происходит объявление функций? Что такое void? Что в скобках? void get(float **mas, int N, int M); void...

Что такое #, include, что это означает - C++
______


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.