Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

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

Апострофы в условии C++
C++ Код не работает,говорит,что не знает,что такое delay(100).в чём проблема?как сделать,чтоб программа заработала?
Кавычки и апострофы C++
C++ Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для начала
Что такое перегрузка оператора? Что у меня в коде за ошибка? C++
В этой части кода происходит объявление функций? Что такое void? Что в скобках? C++
C++ Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
16.08.2011, 19:55     Что такое ' ' (апострофы) #2
В символах апострофа заключают символьные литералы (т.е. один однобайтовый символ)
char c = '1' - можно.
char c = '1234' - нельзя!
char c = '12345' - тоже нельзя!.
1234 - это строковый литерал (т.е. строка символов). Его заключают в двойные кавычки.
Сыроежка
Заблокирован
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
. По крайней мере так в языке С.
Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
16.08.2011, 20:01     Что такое ' ' (апострофы) #4
Цитата Сообщение от Сыроежка Посмотреть сообщение
Вы не правы! Это не строковый литерал, а символьный литерал, имеющий тип
Да, извиняюсь, в данном случае это будет многознаковая символьная константа.
KuKu
16.08.2011, 20:04
  #5

Не по теме:

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

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

Не по теме:

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

Сыроежка
Заблокирован
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.
ValeryS
Модератор
6507 / 4973 / 459
Регистрация: 14.02.2011
Сообщений: 16,474
16.08.2011, 20:13     Что такое ' ' (апострофы) #9
Цитата Сообщение от jerdeks Посмотреть сообщение
Кстати, в инт записывается наоборот, не 1234, а 4321
и не то и не другое '1'=0x31 и т.д
порядок поменятся в памяти а в переменной нет
Миниатюры
Что такое ' ' (апострофы)  
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
16.08.2011, 20:16     Что такое ' ' (апострофы) #10
Цитата Сообщение от Сыроежка Посмотреть сообщение
так наызваемых little indian и big indian
Маленький и большой индийский? Это как-нибудь связано с индусами? Шутка.
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
ValeryS
Модератор
6507 / 4973 / 459
Регистрация: 14.02.2011
Сообщений: 16,474
16.08.2011, 21:16     Что такое ' ' (апострофы) #12
самое главное не это
смотри сркиншот
при int a='1234'
в переменную запишется
i=0x31323334
т.е в переменной будут HEX значения символов
jerdeks
1 / 1 / 0
Регистрация: 19.04.2009
Сообщений: 13
16.08.2011, 22:12  [ТС]     Что такое ' ' (апострофы) #13
ValeryS, это-то ясно
Kastaneda
Форумчанин
Эксперт С++
4468 / 2830 / 224
Регистрация: 12.12.2009
Сообщений: 7,199
Записей в блоге: 1
Завершенные тесты: 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. На первый взгляд кажется бред, но на самом деле все логично - младший байт хранится по младшему адресу, старший - по старшему.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
17.08.2011, 00:07     Что такое ' ' (апострофы) #15
Цитата Сообщение от Kastaneda Посмотреть сообщение
Дело в том, что например число 0x1234, будет хранится в памяти как 0x4321.
Тогда уж как 0x34, 0x12. Всё-таки 8 бит это 2 шестнадцатиричные цифры, да и объединять их тогда не стоит, а то снова 0x1234 получиться должно. Но '1234' это не 0x1234, это 0x31323334, то есть, в little-endian, последовательность байт 0x34, 0x33, 0x32, 0x31.
accept
4819 / 3239 / 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.
Kastaneda
17.08.2011, 07:48
  #17

Не по теме:

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

Mr.X
Эксперт С++
3040 / 1685 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
17.08.2011, 09:31     Что такое ' ' (апострофы) #18
Цитата Сообщение от Сыроежка Посмотреть сообщение
Не помню, как в С++, но в С типом символьного литерала является целое число. То есть символьный литерал '1234' - это целое число.
В C++ символьный литерал имеет тип char (чтобы работали перегруженные функции).
Страуструп пишет в своей книжке, что литерал с несколькими символами в одиночных кавычках архаичен, его интерпретация зависит от реализации, и его следует избегать.
taras atavin
Ушёл с форума.
3569 / 1752 / 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 туда тоже не влезет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2011, 19:15     Что такое ' ' (апострофы)
Еще ссылки по теме:

Кто-нибудь может подробно объяснить, что такое allocators, зачем это и что с ними делать? Нигде не нашёл инфы C++
C++ Что такое хэндлер файла? Что такое файловый указатель?
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами? C++
Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них C++
Объяснить что такое "раздельная компиляция", что такое "интерфейс класса" и "реализация класса" на примере C++

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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
17.08.2011, 19:15     Что такое ' ' (апострофы) #20
Цитата Сообщение от taras atavin Посмотреть сообщение
Кстати, дефолтная разрядность 1 байт
Кстати, байт в терминах языка си никак не может быть разрядностью, ибо не обязан состоять ровно из 8 битов По сути char и byte являются синонимами в том смысле, что размер char ровно один байт. Но битов в байте может быть и больше 8.

Добавлено через 10 минут
Цитата Сообщение от taras atavin Посмотреть сообщение
'1234' - одиночный символ 1234, но такого символа нет и быть не может.
Это не одиночный символ, это multicharacter literal. И как уже здесь говорилось, тип многосимвольного литерала есть int.
Yandex
Объявления
17.08.2011, 19:15     Что такое ' ' (апострофы)
Ответ Создать тему
Опции темы

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