Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 26.03.2017
Сообщений: 40
1

Суффиксы числовых литералов

26.03.2017, 19:59. Показов 5420. Ответов 12
Метки нет (Все метки)

в учебнике видел вот такую строчку:
const float PI = 3.14159F;

или вот такую:
longvar = 7678L;

вопрос такой: зачем в конце цифр ставить букву соответствующую первой букве используемого типа данных?
Спасибо!
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2017, 19:59
Ответы с готовыми решениями:

Ввод в переменную числовых и не числовых данных
Здравствуйте, у меня есть программа (сегодня писал о ней в одной из предыдущих тем), там есть цикл...

Префиксы и суффиксы
Всем привет. Помагите найти ошибку в коде. Заданы две строки S и s. Определить, является ли...

Суффиксы в переменных
Читаю Герберта Шилдта. Упомянул он как-то про про суффик который надо использовать при присвоении...

dns-суффиксы
у меня такой вопрос где в linux можно вписать днс суффикс ? для настройки лакальной сити . я только...

12
1367 / 590 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
26.03.2017, 20:26 2
Потому что в первом случае без F будет double, которая приведётся к float, а во втором, без L, будет int, которая приведётся к longvar.

Добавлено через 2 минуты
А ныне имеем float и long без приведений.
1
Заблокирован
26.03.2017, 20:39 3
Цитата Сообщение от daslex Посмотреть сообщение
в первом случае без F будет double, которая приведётся к float
Чем и в какой момент это самое приведение осуществится?
1
1367 / 590 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
26.03.2017, 21:09 4
Компилятором.
Я не могу сказать о моменте времени абсолютно ничего. Полагаю, всё зависит от их внутренних оптимизаций.

Добавлено через 11 минут
Как бы процессы различны:
без суффиксов - создаётся prvalue типа double/int, которая приводится к float/long. Это обозначает, что происходит лишнее преобразование, которого можно избежать. В зависимости от настроек оптимизаций, может этого и не происходить, но именно из-за существования оптимизаций тип числа вида 1234 воспримется как int, а тип числа 12.33 как double. Чтобы скопировать что-то в long, нужно создать long, поэтому пройдёт второе преобразование, как и с double-float. С этим легко согласиться.
Компилятор компилятору рознь, поэтому здесь не всё прям однозначно, но сам такой процесс в некоторых компиляторах случается.

Я ни доказать этого не могу, ни сказать, где это я вычитал. Читал о приведениях типа, запомнил.
1
Заблокирован
26.03.2017, 21:11 5
Цитата Сообщение от daslex Посмотреть сообщение
без суффиксов - создаётся prvalue типа double/int, которая приводится к float/long. Это обозначает, что происходит лишнее преобразование, которого можно избежать. В зависимости от настроек оптимизаций, может этого и не происходить, но именно из-за существования оптимизаций тип числа вида 1234 воспримется как int, а тип числа 12.33 как double. Чтобы скопировать что-то в long, нужно создать long, поэтому пройдёт второе преобразование, как и с double-float. С этим легко согласиться.
Боюсь, что в случае с константой, напротив с этим легко не соглашусь. В программе не будет double и int, потому что код, который что-то к чему-то приводит класть просто некуда и он не нужен. Программы будут одинаковы, что с F, что без F.
1
1367 / 590 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
26.03.2017, 21:30 6
В программе нет. Вне коробки программы, но и вне нашего взора они должны быть.
prvalue создавать точно также не нужно, когда пишем int i = 100, ибо якобы класть его, этот prvalue, тупо некуда. (Сарказм)

Программы будут одинаковы, но это всё следствие неявных приведений prvalue.

Добавлено через 1 минуту
В случае с суффиксами для prvalue явно задаётся тип. В случае без суффиксов тип prvalue выводится компилятором.

Добавлено через 2 минуты
Да и ладно. Спорить я не буду. Я тихо подожду других людей. Буду наблюдателем.
1
Заблокирован
26.03.2017, 21:33 7
.
1
1 / 1 / 0
Регистрация: 26.03.2017
Сообщений: 40
26.03.2017, 22:22  [ТС] 8
так в итоге что???
зачем после инициализации переменных ставить первую букву ее типа данных???

без этих букв все прекрасно работает) просто в учебнике они повсюду) вот и возник вопрос)
0
1367 / 590 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
26.03.2017, 22:25 9
Не ставьте. Вы ничего не потеряете.

Добавлено через 1 минуту
Но иногда имеет смысл говорить в каком учебнике, потому что часто недоглядев спрашиваем. А потом удивляемся, что всё в учебнике написано было.
1
Заблокирован
26.03.2017, 22:53 10
Цитата Сообщение от cvetkof Посмотреть сообщение
так в итоге что???
В итоге все, как описал daslex. Только для констант в итоговом бинаре разницы не будет. В случае с кодом разница может быть, зависит от оптимизации.
Цитата Сообщение от cvetkof Посмотреть сообщение
просто в учебнике они повсюду)
Хреновый учебник, раз он не пишет, зачем что-то делает. Бери другой.
1
1367 / 590 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
26.03.2017, 23:10 11
Лучший ответ Сообщение было отмечено cvetkof как решение

Решение

В некоторых случаях компилятор сам выкинет эти суффиксы. Так что особо заморачиваться смысла нет. Принимайте это как желание автора подчеркнуть тип данных, чтобы его читатели на это посмотрели, чтобы подумали, чтобы задумались наконец, что тип данных имеет важное значение.
1
1 / 1 / 0
Регистрация: 26.03.2017
Сообщений: 40
27.03.2017, 17:38  [ТС] 12
Спасибо!
0
Evg
Эксперт CАвтор FAQ
21204 / 8220 / 633
Регистрация: 30.03.2009
Сообщений: 22,538
Записей в блоге: 30
27.03.2017, 20:29 13
Чисто на всякий случай. С суффиксом и без суффикса можно словить разное поведение
U, L, F в константах

Добавлено через 52 секунды
И ещё тут: U, L, F в константах
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2017, 20:29

Суффиксы ссылок
Здравствуйте, подскажите пожалуйста стоит ли убрать суффикс ссылки ну хорошо это или поло если...

Нужны ли суффиксы в значениях переменных
Сабж. В переменной типа long, к примеру, нужно к значению приписывать L? Просто вроде в обоих...

Для чего нужны суффиксы?
Здравствуйте. Начал изучать программирование практически с нуля, если не считать Бейсик из...

Использование литералов
В каких ситуациях может быть необходимость использовать литералы? Например, константа 1.2 по...


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

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

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