Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
#1

Зачем нужны разнообразные целые типы переменных? - C++

06.09.2012, 13:32. Просмотров 2067. Ответов 52
Метки нет (Все метки)

1) Вот зачем нам нужен тип short если есть тип long? Как я понял из учебника, если моя переменная будет содержать не слишком большое целое число, то целесообразно использовать short, т.к. он 2 байта (long - 4 байта) и поэтому меньше памяти тратится и соответственно программа работает быстрее. Ну ладно, пусть так (если я, конечно, правильно всё понял).

2) Есть ещё слово unsigned, но тогда переменная не может быть отрицательной. Вот тут на самом деле не ясно, зачем это надо? unsigned long и signed long занимают одинаковый объём памяти.

3) Теперь главное. До того, как я прочитал эту всю ерунду, я всегда писал просто int и никаких проблем. Тут решил писать более разнообразно и везде заменил int на все эти unsigned long int, signed short int и т.п.. И в итоге программа стала выдавать неправильный результат! Пришлось всё поменять как было (везде просто int). Вот интересно стало: кто-нибудь пользуется всем этим разнообразием целых типов? И если да, то зачем? У меня это почему-то привело к ошибкам. Хотя я так и не понял почему. Тем более, что как я понимаю int и signed long int это вообще одно и то же.

4) И ещё: для функции main пишут что надо ставить тип возвращаемого значения int, т.е.
C++
1
int main()
а не:
C++
1
signed long int main() // или что-то наподобие
Так что получается, разработчики сами не особо то пользуются всей этой кучей.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2012, 13:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Зачем нужны разнообразные целые типы переменных? (C++):

Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? - C++
Вот еще один вопрос зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может...

Целые типы - C++
=-OЦелы типы данных (подробно). Операция "%", "/ "!

Целые типы данных - C++
Всем привет! Знаю что сейчас засмеют, но всё же. Вопрос: Если k является переменной типа int, то чему будет равна k после выполнения...

Зачем нужны исключения? - C++
Добрый вечер, прочитал статью об исключениях, не очень понимаю, почему бы не заменить их просто оператором if? Вот код с исключением: ...

Зачем нужны деревья? - C++
Изучил тему деревья (осуществлял втавки, удаление, обходы и т.д.). Теперь хочу разобраться, зачем они вообще нужны? В каких случаях надо...

Зачем нужны операторы << и >> - C++
В книжке Дейтлов есть код http://pic.ipicture.ru/uploads/091222/thumbs/q1TZw4n1JQ.jpg Вопрос в том, что там где написано, что числа...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
06.09.2012, 13:35 #2
еще есть unsigned

типо unsigned short int = 321;

все дело в занимаемой ими памяти. если тебе нужно число 60000, но западло вводить long, то можно использовать unsigned int;
2 байта экономии

ты посмотри диапазон возможных значений. вопросы должны отпасть
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.09.2012, 13:36 #3
почитай двоичное представление чисел.
как пример - для знаковых и беззнаковых операции сдвига будут работать по-разному.
операции сравнения - тоже.
если тебе с небольшими числами, причем по одному работать нужно - используй int и не парься. а если в структуру паковать, а этими структурами еще и контейнеры будут набиваться, или если это передавать куда-то нужно, уже начинаешь считать.
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
06.09.2012, 13:39 #4
1. скорее, просто экономия памяти. грандиозных результатов в скорости за счет изменения int на short особенно-то не получить
2. диапазон значений меняется (для signed / unsigned)
3. надо смотреть код, что у вас там не работает. беззнаковые используют, например, там, где отрицательных чисел быть не должно (размер массива)
4. есть и другие функции, где это актуально
0
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
06.09.2012, 13:40 #5
1) Экономия памяти.
2) Изучал хранение целых чисел в компьютере? Если число беззнаковое, то граница значений переменной увеличивается по модулю в два раза.(т.к. в знаковом 1 бит идёт на хранение знака)
3) Кинь приложение и объясни, что оно делает.
4) Прототипы только такие:
C++
1
2
3
4
5
int main(void);
int main();
 
int main(int argc, char **argv);
int main(int argc, char *argv[]);
Добавлено через 57 секунд
Цитата Сообщение от I.M. Посмотреть сообщение
1. скорее, просто экономия памяти. грандиозных результатов в скорости за счет изменения int на short особенно-то не получить
2. диапазон значений меняется (для signed / unsigned)
3. надо смотреть код, что у вас там не работает. беззнаковые используют, например, там, где отрицательных чисел быть не должно (размер массива)
4. есть и другие функции, где это актуально

Не по теме:

пока писал, 4 поста тут запилили

0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
06.09.2012, 13:45 #6
4) Прототипы только такие:
Правда?:-)
C++
1
int main( int argc, char** argv, char** envp );
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.09.2012, 13:45 #7
Цитата Сообщение от I.M. Посмотреть сообщение
1. скорее, просто экономия памяти. грандиозных результатов в скорости за счет изменения int на short особенно-то не получить
почему же? в регистр одно число помещается, или два - есть разница?
0
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
06.09.2012, 13:46 #8
Цитата Сообщение от Герц Посмотреть сообщение
Правда?:-)
C++
1
int main( int argc, char** argv, char** envp );

Не по теме:

мой фейл . И он есть)

0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
06.09.2012, 13:49 #9
почему же? в регистр одно число помещается, или два - есть разница?
У современных компьютеров (не микроконтроллеров) любой регистр вместит в себя 4 байта, а у 64-битных и все 8, так что на помещении аргументов в регистры не сэкономишь, на кэш-памяти, думаю, тоже.
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.09.2012, 13:50 #10
Цитата Сообщение от Герц Посмотреть сообщение
У современных компьютеров (не микроконтроллеров) любой регистр вместит в себя 4 байта, а у 64-битных и все 8, так что на помещении аргументов в регистры не сэкономишь, на кэш-памяти, думаю, тоже.
на количестве циклов обращения к памяти. причем во столько раз, во сколько короче твои переменые.
0
Bomg
2 / 2 / 0
Регистрация: 04.10.2009
Сообщений: 51
06.09.2012, 13:54 #11
Цитата Сообщение от Alex Z Посмотреть сообщение
4) И ещё: для функции main пишут что надо ставить тип возвращаемого значения int, т.е.
C++
1
int main()
а не:
C++
1
signed long int main() // или что-то наподобие
Так что получается, разработчики сами не особо то пользуются всей этой кучей.
Как я помню из учебника, функция main - главная функция с нее начинается вся программа и возвращает она всегда int значение и никакое более. Могу ошибаться.
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
06.09.2012, 13:56 #12
на количестве циклов обращения к памяти. причем во столько раз, во сколько короче твои переменые.
И то не всегда, допустим есть у тебя структура
C++
1
2
3
4
5
struct
{
    int index;
    int size;
};
И ты знаешь, что index вполне себе помещается в short, но из-за выравнивания ты не получишь никакого бонуса, объявив её как short index; int size;, а если принудительно задать упаковку по границе 1 байта, то еще и в скорости проиграешь.
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.09.2012, 13:58 #13
TS, догоняешь хоть что-нибудь, или тебя уже не здесь?
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
06.09.2012, 14:22 #14
Цитата Сообщение от Герц Посмотреть сообщение
Правда?:-)
C++
1
int main( int argc, char** argv, char** envp );
Мы говорим о стандартном С++?
Тогда цитата из драфта n3337 (в стандарте С++03 аналогично)
An implementation shall not predefine the main function. This function shall not be overloaded. It shall
have a return type of type int, but otherwise its type is implementation-defined. All implementations shall
allow both of the following definitions of main:
C++
1
2
int main() { /* ...
*/ }
and
C++
1
2
int main(int argc, char* argv[]) { /* ...
*/ }
Как видно ограничений на другие - нету, но это уже дело реализации.
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
06.09.2012, 16:26 #15
Тогда извиняюсь :-)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2012, 16:26
Привет! Вот еще темы с ответами:

Зачем нужны сортировки - C++
Скажите пожалуйста, зачем при подготовке к олимпиаде по программированию, нужно учить алгоритмы: Быстрая сортировка, сортировка пузырьком и...

Зачем нужны итераторы? - C++
Практическое использование мне понятно - с их помощью обходят контейнеры и т.д и т.п.Но почему не реализовать нужные методы,перегрузить...

Зачем нужны указатели - C++
Не могу понять синтаксис указателей. Понял, что это работа с адресами, что оператор &amp; это адрес. А вот * как я понял, это объявление...

Зачем нужны классы? - C++
Изучаю СИ++ после изучения СИ. Не пойму какой смысл в классах. То что они делают можно реализовать с помощью функций, структур и обычных...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.09.2012, 16:26
Ответ Создать тему
Опции темы

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