Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2010, 21:57   #1
Smarti
 
Регистрация: 17.01.2009
Сообщений: 3
По умолчанию Константы с U, L и F

Всем добрый вечер!
Объясните пожалуйста, в чём практическая польза от использования U и L на конце константы, с F всё понятно - экономия памяти так как вещественные константы представляются типом double, а вот с целочисленными что-то не ясно, тем более что long int и int в 32-разрядных ОС занимают одинаковое количество памяти. Буду благодарен за ответ.
Smarti вне форума Ответить с цитированием
Старый 01.09.2010, 22:20   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

По умолчанию числа без точек (я про дробную часть) считаются типом int. L делает её long, U - unsigned.

Код:
unsigned i = 3000000000;
// Выдаёт:
// warning: this decimal constant is unsigned only in ISO C90
где-то это даже ошибка. хотя число укладывается в диапазон unsigned.
нужно:
Код:
unsigned i = 3000000000U;

Последний раз редактировалось Carbon; 01.09.2010 в 22:22.
Carbon вне форума Ответить с цитированием
Старый 01.09.2010, 22:45   #3
Smarti
 
Регистрация: 17.01.2009
Сообщений: 3
По умолчанию

Странно но VS 2010 не выдаёт никаких предупреждений по этому поводу. И к чему такие костыли, разве компилятор не должен понимать что значение константы нужно преобразовать к unsigned int.
Smarti вне форума Ответить с цитированием
Старый 01.09.2010, 23:14   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Согласно стандарту int вовсе не обязано быть эквивалентно long. Единственное, что про них можно сказать, так это то, что
Код:
sizeof(short) <= sizeof(int) <= sizeof(long)
То, что в каком-то случае размеры int и long оказались равны - детали реализации..
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 01.09.2010, 23:35   #5
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Цитата:
Сообщение от Smarti Посмотреть сообщение
Странно но VS 2010 не выдаёт никаких предупреждений по этому поводу. И к чему такие костыли, разве компилятор не должен понимать что значение константы нужно преобразовать к unsigned int.
Да есть варианты, когда компилятор не сможет догадаться, какой тип нужен. Вот нужно ввести переменную типа long long. Пишем 3000000000, если компилятор это проглотит, то получится дополнение в виде отрицательного числа. Если не проглотит, то выдаст предупреждение или ошибку. А нужно всего-то было то, что было написано.

ЗЫ По поводу "догадаться по виду числа": вот то же 3000000000. И какого оно типа должно быть?

Последний раз редактировалось Carbon; 01.09.2010 в 23:39.
Carbon вне форума Ответить с цитированием
Старый 01.09.2010, 23:38   #6
Smarti
 
Регистрация: 17.01.2009
Сообщений: 3
По умолчанию

Спасибо за ответы, вроде немного ясно стало
Smarti вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инкремент константы в цикле, FASM suicide Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 19.12.2009 21:18
Константы в заголовочных файлах. jojahti Общие вопросы C/C++ 13 27.08.2009 16:03
Замена константы, переменной valerij Microsoft Office Excel 2 20.03.2008 21:16
Константы в Макросе valerij Microsoft Office Excel 2 03.02.2008 23:33
Имя константы-в строку Роман Радер Общие вопросы Delphi 2 04.07.2007 12:37