Технический форум

Технический форум (http://www.tehnari.ru/)
-   Форум программистов (http://www.tehnari.ru/f22/)
-   -   Типы данных. Зачем нужен int? (http://www.tehnari.ru/f22/t56413/)

Bydlokoder 26.08.2011 07:55

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

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

AlexZir 26.08.2011 12:07

Для внутренней совместимости форматов, скорее всего.

Bydlokoder 26.08.2011 12:58

Чтобы избежать проблем с кодом, созданным давным-давно под старые компиляторы? Понятно... А я грешным делом подумал, что бывают особые случаи, когда без int никак обойтись нельзя.

AlexZir 26.08.2011 13:53

Не совсем так.
Различают так называемые фундаментальные и интегральные типы данных. 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;
допустимо (но компилятор обязательно сделает предупреждение).
Подытоживая вышеприведенное, могу сказать только, что каждый тип данных для чего-то нужен и существование их разнообразия оправдано, к примеру, с точки зрения грамотного распределения ресурсов памяти.

Bydlokoder 26.08.2011 16:20

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

kreol 26.08.2011 23:31

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

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

и другую

float a = 2

то первая будет вообще говоря весить меньше второй. но это совсем не значительно. есть еще некоторые функции кажется с округлением. там тоже есть некоторые проблемы.в общем если известно что там будет только целые то лучше использовать именно их если еще и положительные то unsigned если еще и не нужно сильно больше то вроде можно использовать shortint ну и т.д. старайтесь оптимизировать код сразу но не усердствовать сильно. соблюдать середину золотую так сказать)))

simply_sash 29.08.2011 01:45

Просто действия над целыми числами выполняются гораздо бысрее чем над вещественными и требуют меньше памяти для хранения. Все очень просто, нужно оперировать целочисленными значениями -- выбираем int (если мало, то long int), нужны дробные -- float или double.

Bydlokoder 31.08.2011 18:46

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

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


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.