27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
|
|||||||||||
1 | |||||||||||
Зачем нужны разнообразные целые типы переменных?06.09.2012, 13:32. Показов 7490. Ответов 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, т.е.
0
|
06.09.2012, 13:32 | |
Ответы с готовыми решениями:
52
Целые типы Целые типы данных Целые типы данных Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? |
07.09.2012, 13:32 | 21 | |||||
наверное, где-то сравнение выполняется. а результат его будет зависеть от типов.
0
|
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
|
||||||
07.09.2012, 13:34 [ТС] | 22 | |||||
А если я делаю так:
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
07.09.2012, 13:53 | 24 |
int всегда имеет знак, он не может быть короче short и не может быть длиннее long
signed int равен int signed введён из-за char, который может иметь знак, а может не иметь знака старшего бита если старший бит является знаковым битом, то он не может являться частью величины значения например, 32-х битная переменная может вместить 2 ^ 32 разных значений если старший бит - знаковый, то эти 2 ^ 32 значений состоят из положительных, отрицательных и нуля если старший бит - беззнаковый, то эти 2 ^ 32 значений состоят из положительных и нуля (а сам бит участвует в образовании величины)
1
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
||||||
07.09.2012, 14:08 | 25 | |||||
да накосячил
хотел поправить но интернет умер правильно читать так
конечно бита просто описался
0
|
Заблокирован
|
|
23.08.2015, 10:47 | 26 |
я тоже задаюсь аналогичными вопросами и никак не могу понять, в каком случае лучше использовать тот или иной тип. думаю, что пока у меня нет в этом необходимости, то буду писать просто int. если кто-нибудь знает простую методику запонимания какой переменной какой тип лучше, кроме опыта и зазубривания, то было бы неплохо её выложить. я думаю многие новички оценят
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
23.08.2015, 11:14 | 27 |
Зависит от обстоятельств и выбора критерия, по которому идет учет что лучше.
Например, в каких-то случаях лучше скорость, а в других - кол-во использованной памяти. Поэтому однозначной рекомендации для всех быть не может.
0
|
Заблокирован
|
|
23.08.2015, 11:23 | 28 |
Tulosba, вы имеет в виду, что такой методики нет? я говорю про методику запоминания преимуществ или недостатков типа переменных, а не их надобности. например, помните как запоминали в школе падежи?
Иван Родил Девченку Велел Тащить Пелёнку или пример именно из программирования: если число д.б. с запятой, то автоматом в памяти всплывает float. получается такая простая ассоциативность запятая значит float. и если есть какая-либо ассоциативность на другие типы, то я был бы рад) если нет, то придётся зубрить
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
23.08.2015, 11:33 | 29 | |||||
Если речь о целых типах (как названа текущая тема), то запоминать особо и нечего. Кроме того, что префикс signed или unsigned не влияет на размер в байтах, и что в любом компиляторе должно согласно Стандарта выполняться следующее неравенство:
0
|
Респект C++
23 / 33 / 14
Регистрация: 11.06.2015
Сообщений: 384
|
|
23.08.2015, 11:41 | 30 |
Мой вам совет. Используйте double. С ним вообще никаких проблем. Он и слишком большие числа считает, и десятичные, шестнадцатиричные, и целые да и вообще самый удобный. А про unsigned - конечно будет неправильный ответ. Он даже переводится как "беззнаковый".
1
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
23.08.2015, 11:53 | 32 | |||||
Плохой совет. Вот пример для демонстрации того, что так делать нельзя:
Добавлено через 1 минуту Такого типа нет. Всё же рекомендую заглянуть хотя бы в учебник по языку, дабы уяснить базовые моменты, прежде чем обращаться за помощью на форум.
1
|
Заблокирован
|
|
23.08.2015, 12:03 | 33 |
на самом деле я осознанно пропускаю материалы про типы переменных в учебнике, потому что и без них моск морщится и приходится уделять большее время второстепенным вопросам, которые, возможно, мне понадобятся не раньше чем через год... и именно осознанный пропуск данной информации и послужил основой для поднятия этой темы. просто с вашим опытом, это кажется ошибкой или некомпетентностью, а для меня, как новичка, это пока не столь важно, и я стараюсь уделить больше внимания тому материалу, который явно влияет на результат выполнения программы, до тех пор, пока меня устраивает int. но тем не менее, спасибо вам за совет
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
||||||
23.08.2015, 12:08 | 34 | |||||
Не надо ничего зубрить. Нужно больше практики и понимание придет само без всякой зубрежки.
Если сейчас выводить правила в стиле "если - то", то их получится гораздо больше, чем типов в языке, потому что у каждого типа множество различных применений в зависимости от ситуации. Вот простой пример:
Главное помнить, что серебряной пули нет. Нет одного универсального правила на все случаи жизни. Могут быть только рекомендации, например: - использовать size_t для обозначения размеров, это беззнаковый целый тип. - использовать ptrdiff_t для разницы указателей, это знаковый целый тип. Кстати, прочитать про это можно тут.
4
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
23.08.2015, 16:07 | 35 | |||||
очевидно жеж, что это - криворукий код.
стандарт предусматривает тип данных size_t, специально предназначенный для хранения размеров типов, и как следствие - индексов массивов. в большинстве реализаций size_t и unsigned - одно и тоже. а вот использовать для таких целей int - некорректно. формально, это - не типы данных. это модификаторы для фундаментального типа int. есть фундаментальный тип int, и кучка модификаторов к нему, такие как short, или long. однако, на практике инты с различными модификаторами опознаются как разные типы. что и порождает иллюзию, что это принципиально различные типы. впрочем если их рассматривать, как принципиально разные типы, то вы ничего страшного не упустите. сами модификаторы влияют лишь на размер фундаментального типа. что однако, попадает под правило "промоушена типов". поэтому, можно сказать, что модификаторы типов влияют так же и на промоушен типов. "промоушен типов" - если вкратце, оптимизация вычислений по разрядной сетке машины. пример: http://rextester.com/NTVU87023
язык с++ возник не вчера. он возник во времена, когда ещё не было никаких "современных процессоров". кроме того, в его основе заложена идея о "встраиваемости", что неизбежно влечет за собой необходимость "адаптации" к самым различным условиям. то есть, он должен максимально эффективно работать на самых разных платформах. за счет модификаторов и промоушена становится возможным реализовать оптимизации вычислений на конкретной платформе.
2
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
23.08.2015, 17:51 | 36 |
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
23.08.2015, 18:14 | 37 |
смею предположить, что господин ValeryS прочитал это здесь:
http://en.cppreference.com/w/cpp/language/types
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
23.08.2015, 18:27 | 39 |
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
23.08.2015, 18:30 | 40 |
0
|
23.08.2015, 18:30 | |
23.08.2015, 18:30 | |
Помогаю со студенческими работами здесь
40
Зачем в MSVC дублируются типы данных? Не понимаю зачем нужен конструктор и типы методов Зачем нужны транзакции? Зачем нужны исключения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |