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

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

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

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

16.08.2011, 19:52. Просмотров 3162. Ответов 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
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.08.2011, 06:17 #16
C89(draft) 3.1.3.4 Character constants
грамматика символьных констант
Код
3.1.3.4 Character constants

Syntax

          character-constant:
                  ' c-char-sequence' 
                  L' c-char-sequence' 

          c-char-sequence:
                  c-char
                  c-char-sequence c-char

          c-char:
                  any member of the source character set except
                   the single-quote ', backslash \, or new-line character
                   escape-sequence

          escape-sequence:
                  simple-escape-sequence
                  octal-escape-sequence
                  hexadecimal-escape-sequence

          simple-escape-sequence: one of
                  \'  \"  \?  \\
                  \a  \b  \f  \n  \r  \t  \v

          octal-escape-sequence:
                  \  octal-digit
                  \  octal-digit octal-digit
                  \  octal-digit octal-digit octal-digit

          hexadecimal-escape-sequence:
                  \x  hexadecimal-digit
                  hexadecimal-escape-sequence hexadecimal-digit

...

The value of an integer character constant containing more
than one character, or containing a character or escape sequence not
represented in the basic execution character set, is
implementation-defined.
0
Kastaneda
17.08.2011, 07:48
  #17

Не по теме:

Цитата Сообщение от grizlik78 Посмотреть сообщение
Тогда уж как 0x34, 0x12. Всё-таки 8 бит это 2 шестнадцатиричные цифры, да и объединять их тогда не стоит, а то снова 0x1234 получиться должно. Но '1234' это не 0x1234, это 0x31323334, то есть, в little-endian, последовательность байт 0x34, 0x33, 0x32, 0x31.
Да, конечно же! Просто уже ночью писал

0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
17.08.2011, 09:31 #18
Цитата Сообщение от Сыроежка Посмотреть сообщение
Не помню, как в С++, но в С типом символьного литерала является целое число. То есть символьный литерал '1234' - это целое число.
В C++ символьный литерал имеет тип char (чтобы работали перегруженные функции).
Страуструп пишет в своей книжке, что литерал с несколькими символами в одиночных кавычках архаичен, его интерпретация зависит от реализации, и его следует избегать.
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.08.2011, 18:57 #19
Цитата Сообщение от jerdeks Посмотреть сообщение
А вот что такое '1234' и почему нельзя '12345'?
'1234' - одиночный символ 1234, но такого символа нет и быть не может. А "1234" - это строка из '1', '2', '3' и '4', собранных вместе.

Добавлено через 4 минуты
Цитата Сообщение от Сыроежка Посмотреть сообщение
Это корректная запись. А при присвоении '12345' происходит потеря значения, поэтому наверное и выдает ошибку.
Нет. Потеря битов выдаётся в напоминаниях, а не в ошибках. '12' - уже нельзя, так как 1 и 2 - два символа, а в апостроф заключается один, значением будет его код (потому '1' и равно 48, а не 1). А двум символам 1 и 2 сразу код не присвоен. Кстати, дефолтная разрядность 1 байт, 1234 туда тоже не влезет.
0
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,018
17.08.2011, 19:15 #20
Цитата Сообщение от taras atavin Посмотреть сообщение
Кстати, дефолтная разрядность 1 байт
Кстати, байт в терминах языка си никак не может быть разрядностью, ибо не обязан состоять ровно из 8 битов По сути char и byte являются синонимами в том смысле, что размер char ровно один байт. Но битов в байте может быть и больше 8.

Добавлено через 10 минут
Цитата Сообщение от taras atavin Посмотреть сообщение
'1234' - одиночный символ 1234, но такого символа нет и быть не может.
Это не одиночный символ, это multicharacter literal. И как уже здесь говорилось, тип многосимвольного литерала есть int.
0
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,187
17.08.2011, 20:15 #21
Цитата Сообщение от taras atavin Посмотреть сообщение
так как 1 и 2 - два символа, а в апостроф заключается один, значением будет его код (потому '1' и равно 48, а не 1). А двум символам 1 и 2 сразу код не присвоен. Кстати, дефолтная разрядность 1 байт, 1234 туда тоже не влезет.
посмотри на моем скриншоте
если лень могу расписать
int mm='1234'
отладчик показал
mm=0x31323334
что логично
на платформе 0x386(intel)
int равен 4 байтам char одному
для чего это нужно??? например для кодировки
C++
1
2
3
4
5
char buf[]="asdfbcd";
int k='1234';
int * pbuf=(int*)&buf[0];
for(int i=0; i<sizeof(buf);i++)
  pbuf^=k
сразу предупреждаю пример не рабочий(просто идея)
во первых никто не даст писать в статику
во вторых выход за пределы массива
0
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,018
17.08.2011, 20:21 #22
Цитата Сообщение от ValeryS Посмотреть сообщение
во первых никто не даст писать в статику
С чего бы?

Цитата Сообщение от ValeryS Посмотреть сообщение
во вторых выход за пределы массива
Ну это да. Хотя первые 2 итерации за границу не выходят. Но вторая уже убивает нуль-терминатор. Впрочем, в случае кодирования/шифрования 0 редко когда может считаться признаком конц строки.
0
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,187
17.08.2011, 21:13 #23
Цитата Сообщение от ValeryS Посмотреть сообщение
for(int i=0; i<sizeof(buf);i++)
косячек здесь
по правильному
C++
1
for(int i=0; i<sizeof(buf)/sizeof(int);i++)
0
17.08.2011, 21:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2011, 21:13
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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