• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Типы данных. Зачем нужен int?

Bydlokoder

Ученик
Почётный участник
Регистрация
6 Май 2011
Сообщения
3,357
Реакции
108
Баллы
0
Типы данных. Зачем нужен int?

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

Подозреваю, что int есть рудимент, оставшийся с тех времен, когда компьютеры были большими, а оперативная память очень маленькая и использовался для экономии ресурсов. Сейчас то какой в нем смысл? Или я чего-то недопонимаю (не знаю)?
 
Для внутренней совместимости форматов, скорее всего.
 
Чтобы избежать проблем с кодом, созданным давным-давно под старые компиляторы? Понятно... А я грешным делом подумал, что бывают особые случаи, когда без int никак обойтись нельзя.
 
Не совсем так.
Различают так называемые фундаментальные и интегральные типы данных. 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;
допустимо (но компилятор обязательно сделает предупреждение).
Подытоживая вышеприведенное, могу сказать только, что каждый тип данных для чего-то нужен и существование их разнообразия оправдано, к примеру, с точки зрения грамотного распределения ресурсов памяти.
 
Выходит, выводы мои были поспешны и int совсем не лишний и не устаревший тип, а один из элементов, придающий языку C гибкость и эффективность. Спасибо за поправку, а то у меня начало уже складываться неверное понимание самых основ C, по-видимому сказывается тяжкое наследие бейсика :(
 
вообще-то это для оптимизации. ведь не будете забивать маленькие гвозди кувалдой так ведь?

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

и другую

float a = 2

то первая будет вообще говоря весить меньше второй. но это совсем не значительно. есть еще некоторые функции кажется с округлением. там тоже есть некоторые проблемы.в общем если известно что там будет только целые то лучше использовать именно их если еще и положительные то unsigned если еще и не нужно сильно больше то вроде можно использовать shortint ну и т.д. старайтесь оптимизировать код сразу но не усердствовать сильно. соблюдать середину золотую так сказать)))
 
Просто действия над целыми числами выполняются гораздо бысрее чем над вещественными и требуют меньше памяти для хранения. Все очень просто, нужно оперировать целочисленными значениями -- выбираем int (если мало, то long int), нужны дробные -- float или double.
 
Проверил на практике скорость выполнения приложений с различными типами данный. Простенькая программулька с циклом for, складывающая последовательно все числа начиная с единицы, вплоть до того, пока сумма не станет равна 1_у миллиарду. Сначала все переменные объявил как int, потом как dooble. В первом случае программа выполнилась в 1,5 раза быстрее!!! :eek:

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