Технический форум
Вернуться   Технический форум > Программирование > Форум программистов


Ответ
 
Опции темы Опции просмотра
Старый 26.08.2011, 07:55   #1 (permalink)
Bydlokoder
Member
 
Регистрация: 06.05.2011
Сообщений: 3,305
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 11775
По умолчанию Типы данных. Зачем нужен int?

Заранее приношу извинения, за свой глупый наверное вопрос, но никак не могу понять, для чего в языке C предусмотрен тип данных int? Есть double и float с много большей разрядностью, а тут какой-то обрезок, да к тому же зависящий от разрядности операционной системы, что имхо может стать причиной неоднозначности в ходе выполнения приложения. К тому же компиляторы автоматически преобразуют int в более "длинные" типы данных, если int встречается в выражениях вместе с double и float. Зачем же он нужен?

Подозреваю, что int есть рудимент, оставшийся с тех времен, когда компьютеры были большими, а оперативная память очень маленькая и использовался для экономии ресурсов. Сейчас то какой в нем смысл? Или я чего-то недопонимаю (не знаю)?
Bydlokoder вне форума   Ответить с цитированием

Старый 26.08.2011, 07:55
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

На нашем форуме создается много подобных тем

Откуда и зачем?
Зачем нужен драйвер realtek HD Audio (встроенное) на Windows 7?

Старый 26.08.2011, 12:07   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 14,365
Записей в дневнике: 56
Сказал(а) спасибо: 121
Поблагодарили 149 раз(а) в 61 сообщениях
Репутация: 58290
По умолчанию

Для внутренней совместимости форматов, скорее всего.
__________________
Убить всех человеков!
AlexZir на форуме   Ответить с цитированием
Старый 26.08.2011, 12:58   #3 (permalink)
Bydlokoder
Member
 
Регистрация: 06.05.2011
Сообщений: 3,305
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 11775
По умолчанию

Чтобы избежать проблем с кодом, созданным давным-давно под старые компиляторы? Понятно... А я грешным делом подумал, что бывают особые случаи, когда без int никак обойтись нельзя.
Bydlokoder вне форума   Ответить с цитированием
Старый 26.08.2011, 13:53   #4 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 14,365
Записей в дневнике: 56
Сказал(а) спасибо: 121
Поблагодарили 149 раз(а) в 61 сообщениях
Репутация: 58290
По умолчанию

Не совсем так.
Различают так называемые фундаментальные и интегральные типы данных. Int относится именно к фундаментальным типам. На основе фундаментальных типов можно, опираясь на правила преобразования и конструирования типов, построить интегральные, естественно, с наследованием соответствующих признаков.
И еще, вот цитаты из книги Бьярна Страустрапа "Введение в язык C++":
Цитата:
В C++ есть набор основных типов, которые соответствуют наиболее общим основным единицам памяти компьютера и наиболее общим основным способам их использования:
char
short int
int
long int
Цитата:
Причина того, что предоставляется более чем один целый тип, более чем один беззнаковый тип и более чем один тип с плавающей точкой, в том, чтобы дать возможность программисту воспользоваться характерными особенностями аппаратного обеспечения. На многих машинах между различными разновидностями основных типов существуют значительные различия в потребностях памяти, временах доступа к памяти и временах вычислений. Зная машину обычно легко, например, выбрать подходящий тип для конкретной переменной. Написать действительно переносимую программу нижнего уровня сложнее. Вот все, что гарантируется относительно размеров основных типов:
1==sizeof(char)<=sizeof(short)<= sizeof(int)<=sizeof(long)
sizeof(float)<=sizeof(double)
Однако обычно разумно предполагать, что в char могут храниться целые числа в диапазоне 0...127 (в нем всегда могут храниться символы машинного набора символов), что short и int имеют не менее 16 бит, что int имеет размер, соответствующий целой арифметике, и что long имеет по меньшей мере 24 бита. Предполагать что-либо помимо этого рискованно, и даже эти эмпирические правила применимы не везде.
Цитата:
Беззнаковые (unsigned) целые типы идеально подходят для применений, в которых память рассматривается как массив битов. Использование unsigned вместо int с тем, чтобы получить еще один бит для представления положительных целых, почти никогда не оказывается хорошей идеей. Попытки гарантировать то, что некоторые значения положительны, посредством описания переменных как unsigned, обычно срываются из-за правил неявного преобразования. Например:
unsigned surprise = -1;
допустимо (но компилятор обязательно сделает предупреждение).
Подытоживая вышеприведенное, могу сказать только, что каждый тип данных для чего-то нужен и существование их разнообразия оправдано, к примеру, с точки зрения грамотного распределения ресурсов памяти.
__________________
Убить всех человеков!
AlexZir на форуме   Ответить с цитированием
Старый 26.08.2011, 16:20   #5 (permalink)
Bydlokoder
Member
 
Регистрация: 06.05.2011
Сообщений: 3,305
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 11775
По умолчанию

Выходит, выводы мои были поспешны и int совсем не лишний и не устаревший тип, а один из элементов, придающий языку C гибкость и эффективность. Спасибо за поправку, а то у меня начало уже складываться неверное понимание самых основ C, по-видимому сказывается тяжкое наследие бейсика
Bydlokoder вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 26.08.2011, 23:31   #6 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

вообще-то это для оптимизации. ведь не будете забивать маленькие гвозди кувалдой так ведь?

в дельфи например есть еще тип word кажется и еще какой-то так там вообще до от -256 до 256. если создать к примеру программу в том же с в нем переменную int a =1

и другую

float a = 2

то первая будет вообще говоря весить меньше второй. но это совсем не значительно. есть еще некоторые функции кажется с округлением. там тоже есть некоторые проблемы.в общем если известно что там будет только целые то лучше использовать именно их если еще и положительные то unsigned если еще и не нужно сильно больше то вроде можно использовать shortint ну и т.д. старайтесь оптимизировать код сразу но не усердствовать сильно. соблюдать середину золотую так сказать)))
kreol вне форума   Ответить с цитированием
Старый 29.08.2011, 01:45   #7 (permalink)
simply_sash
Новичок
 
Регистрация: 19.08.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Просто действия над целыми числами выполняются гораздо бысрее чем над вещественными и требуют меньше памяти для хранения. Все очень просто, нужно оперировать целочисленными значениями -- выбираем int (если мало, то long int), нужны дробные -- float или double.
simply_sash вне форума   Ответить с цитированием
Старый 31.08.2011, 18:46   #8 (permalink)
Bydlokoder
Member
 
Регистрация: 06.05.2011
Сообщений: 3,305
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 11775
По умолчанию

Проверил на практике скорость выполнения приложений с различными типами данный. Простенькая программулька с циклом for, складывающая последовательно все числа начиная с единицы, вплоть до того, пока сумма не станет равна 1_у миллиарду. Сначала все переменные объявил как int, потом как dooble. В первом случае программа выполнилась в 1,5 раза быстрее!!!

Все, пошел перечитывать раздел о правилах преобразования типов, который сначала счел не особо важным.
Bydlokoder вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 20:09.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.