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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.97
koder
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
#1

Зачем нужны модификаторы типов? - C++

14.06.2012, 18:44. Просмотров 5129. Ответов 21
Метки нет (Все метки)

Читаю Шилдта и все более менее понятно,но насчет unsigned , signed , shot , long что то вообще дыра в понимании и их пропускал,а потом пришлось вернутся.Наверно это из-за того,что для меня не понятны многие моменты и их описания.Например,что за таблица,в которой написаны : типы,биты,диапазон?Биты - размер,но не ясно зачем знать какой он и где это применяется.Диапазон - ^_^,к примеру что это -128 127 и опять же зачем?Книжку ещё не дочитал и может забегаю на перед,но Шилдт так уверено примеры дает и пишет о них,что кажется я уже должен ясно понимать о чем идет речь.Пожалуйста объясните максимально подробно и понятно(гугл не помог).
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2012, 18:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Зачем нужны модификаторы типов? (C++):

Для чего нужны модификаторы protected, private, public - C++
подскажите, кто в курсе, зачем вообще нужны эти модификаторы доступа? ведь, все их можно обойти... сейчас курю Страуструпа "Дизайн и...

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

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

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

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

Зачем нужны макросы? - C++
Зачем нужны макросы?

21
Catstail
Модератор
23040 / 11407 / 1859
Регистрация: 12.02.2012
Сообщений: 18,670
14.06.2012, 19:30 #2
1) Числа со знаком называются "signed". Как ты знаешь, знак числа занимает один бит. Рассмотрим байт. В нем 8 бит. Если старший бит использовать для знака, то на число остаётся 7 бит. В семи битах можно максимально уместить число 127. Если же знак не используется, то числа наз. "unsigned". Беззнаковые числа всегда неотрицательны. В тех же 8 битах можно разместить число от 0 до 255.

2) short и long обеспечивают нужный диапазон чисел. Так short может быть двухбайтовым целым, а long - 4-байтовым (это зависит от реализации языка)
1
koder
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
14.06.2012, 20:22  [ТС] #3
Ясно,ну а где это все пригодится?
0
Vlad1slav
21 / 21 / 5
Регистрация: 16.09.2009
Сообщений: 111
14.06.2012, 20:37 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от koder Посмотреть сообщение
Ясно,ну а где это все пригодится?
При программировании пригодиться))

short используется для экономии памяти, если у тебя очень большой массив данных храниться, допустим на 10^9 элементов, то int займёт 4 Гб, а short в 2 раза меньше(хотя на некоторых компах int=short).

long используется если тебе не достаточно диапозона inta, например тебе надо хранить числа порядка 10^10. Если ты попытаешься сохранить такое число в int, то у тебя будет переполнение и в результате ты не сможешь восстановить то число, которое сохранил в переменную.

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

Во всех языках программирования есть разние типы данных, разного диапозона.
Беззнаковые типы тоже встречаются во многих языках, но в некоторых нет, например java.
3
koder
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
14.06.2012, 21:03  [ТС] #5
Интересно для каких это проектов понадобится).Ну суть понята спасибо,странно что Шилдт этой теме уделяет время в книге для начинающих ибо без реальной задачи с оптимизацией тяжело разобраться.
0
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
14.06.2012, 21:09 #6
C и C++ имеют низкоуровневые методы, поэтому таким вещам учить необходимо. В большинстве случаев можно обойтись int и double. Но когда для задачи оказывается критически важными объем памяти, точность вычислений, либо взаимодействие с другими платформами/технологиями, то знать столь низкоуровневую информацию о типах нужно.
0
koder
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
14.06.2012, 21:34  [ТС] #7
Я и не спорю о таком,конечно нужно,но имхо для новичка в книге Шилдта слишком поверхностная подача этих низкоуровневых методов,если уж без глубины описывать что то,то лучше совсем не писать.
0
Somebody
2793 / 1604 / 148
Регистрация: 03.12.2007
Сообщений: 4,200
Завершенные тесты: 3
14.06.2012, 22:02 #8
Цитата Сообщение от Vlad1slav Посмотреть сообщение
long используется если тебе не достаточно диапозона inta, например тебе надо хранить числа порядка 10^10.
Только long обычно не больше 4 байт, так что 10^10 в него скорее всего не влезет.
0
Vlad1slav
21 / 21 / 5
Регистрация: 16.09.2009
Сообщений: 111
15.06.2012, 16:53 #9
Цитата Сообщение от koder Посмотреть сообщение
Я и не спорю о таком,конечно нужно,но имхо для новичка в книге Шилдта слишком поверхностная подача этих низкоуровневых методов,если уж без глубины описывать что то,то лучше совсем не писать.
Возьмите любую другую книжку, даже по тому же Паскалю... Везде среди первых глав вы найдёте описание типов данного языка. Так заведено, привыкайте)

Цитата Сообщение от Somebody Посмотреть сообщение
Только long обычно не больше 4 байт, так что 10^10 в него скорее всего не влезет.
Я же образно, цифры с потолка брал, чтобы пояснить разницу между long и int(Хотя зачастую в них и вправду разницы нет, зависит от процессора)
4*10^9 влезит)
0
Байт
Диссидент
Эксперт C
17239 / 11311 / 1792
Регистрация: 24.12.2010
Сообщений: 22,277
15.06.2012, 20:59 #10
Цитата Сообщение от Somebody Посмотреть сообщение
Только long обычно не больше 4 байт, так что 10^10 в него скорее всего не влезет.
На 64-х битовых процессорах long уже становится 8-ми байтовым. (от транслятора, конечно, зависит, но они как правило стараются на всю катушку)
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
16.06.2012, 06:48 #11
signed - это знаковый, unsigned - беззнаковый.
На лекции было всего два студента, внезапно встали и ушли пятеро, а лектор и говорит: сейчас придут ещё трое и вообще ни кого не останется.
Количество - это всегда unsigned, так как оно не может быть отрицательным. Но если разрядность большая, есть защита от неправильных входных данных, а максимально допустимое значение мало, то можно unsigned не ставить. unsigned уже даёт встроенную защиту от отрицательных и позволяет избежать if, но не позволяет сравнивать с нолём в цикле, если цикл до ноля включительно. Но если у тебя условие строго >0, или даже какого то положительного числа, то это не актуально и
C++
1
2
unsigned int i; 
for (i=n-1; i<n; --i)// на последнем шаге цикла i переполнится вниз при --i и станет равно максимально представимому значению, что больше любого другого n, а если n максимально представимо, то равно n
.
ноль программистов ругал сердитый шев, потом уволил одного и стало их FF.
FF в unsigned - это по-десятичному 255, а не -1. То есть ноль минус один равно много. Получается, что сравнение с нолём тоже не так актуально. Да и цикл может быть не до ноля включительно, а до ноля, не включая его, то есть до единицы включительно,
C++
1
2
unsigned int i; 
for (i=n; i>0; --i)// тоже сработает
. Если число может быть и отрицательным, то оно всегда signed. small, short, long, hyper и long long - разрядность. sizereof(small)<sizereof(short)<=sizereof(int)<=sizereof(long)<<sizereof(long long). И sizereof(long)<sizeof(hyper). Но как соотносятся long long и hyper и есть ли вообще в диалекте small и hyper - отдельный вопрос, общего ответа не имеющий.

Добавлено через 55 секунд
Цитата Сообщение от koder Посмотреть сообщение
Диапазон - ^_^,к примеру что это -128 127 и опять же зачем?
Ну а если ты с дуру введёшь 200?

Добавлено через 3 минуты
Цитата Сообщение от Vlad1slav Посмотреть сообщение
hort используется для экономии памяти, если у тебя очень большой массив данных храниться, допустим на 10^9 элементов, то int займёт 4 Гб, а short в 2 раза меньше(хотя на некоторых компах int=short).
long займёт больше, чем short. Во сколько раз - вопрос отдельный. Обычно в два. А может в четыре? А вот int займёт ровно столько же, сколько или short, или long.

Добавлено через 2 минуты
Цитата Сообщение от Байт Посмотреть сообщение
На 64-х битовых процессорах long уже становится 8-ми байтовым. (от транслятора, конечно, зависит, но они как правило стараются на всю катушку)
А short - 4-х? Врядли. И int там обычно 4 байта. Разрядность повышали не для арифметики, а для адреса и мемсайзных типов. То есть для памяти и количества данных: аддерсное пространство x64 = 16ЭБ.

Добавлено через 1 минуту
Цитата Сообщение от koder Посмотреть сообщение
Интересно для каких это проектов понадобится).Ну суть понята спасибо,странно что Шилдт этой теме уделяет время в книге для начинающих ибо без реальной задачи с оптимизацией тяжело разобраться.
А при чём здесь вообще оптимизация?
2
koder
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
17.06.2012, 14:51  [ТС] #12
taras atavin
Спасибо за пояснения,примерно разобрался,а там уже когда столкнусь с такой задачей,то буду углубляться и ещё раз перечитаю сообщения в этой теме)

Добавлено через 12 минут
А почему говорят что signed int , unsigned int и int - это три разные типа, ведь signed int и int идентичны или я не прав?
0
Somebody
2793 / 1604 / 148
Регистрация: 03.12.2007
Сообщений: 4,200
Завершенные тесты: 3
17.06.2012, 17:03 #13
Цитата Сообщение от koder Посмотреть сообщение
А почему говорят что signed int , unsigned int и int - это три разные типа, ведь signed int и int идентичны или я не прав?
Кто так говорит? char, signed char и unsigned char в C++ - три разных, но int и signed int - одно и то же.
0
Evg
Эксперт CАвтор FAQ
18705 / 6673 / 472
Регистрация: 30.03.2009
Сообщений: 18,685
Записей в блоге: 29
17.06.2012, 17:15 #14
signed, unsigned, short, long по своей сути НЕ являются модификаторами типов. Это ключевые слова, которые задают разные типы. Т.е. "short int" НЕ надо рассматривать как тип int с модификаторам, а следует рассматривать просто как отдельный целочисленный тип. Каждый целочисленный тип обладает двумя основными характеристиками: размер и знаковость. Размер определяет то, сколько бит отводится для хранения числа. Чем больше бит, чем бОльший диапазон значений можно хранить в данном типе. Знаковость числа влияет на то, как число будет трактоваться. Более подробно описывал в посте N11 в данной теме: Signed/Unsigned. Но лучше всю тему просмотри

Ну и так, для порядку: http://www.cyberforum.ru/blogs/18334/blog69.html

Цитата Сообщение от taras atavin Посмотреть сообщение
А вот int займёт ровно столько же, сколько или short, или long
Бред. В 64-разрядных режимах short=2, int=4, long=8
1
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
17.06.2012, 17:32 #15
Цитата Сообщение от Evg Посмотреть сообщение
Бред. В 64-разрядных режимах short=2, int=4, long=8
Да? Не знал.
0
17.06.2012, 17:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2012, 17:32
Привет! Вот еще темы с ответами:

Зачем нужны указатели? - C++
Интересует вопрос, зачем нужны указатели? Например почему лучше нужно объявлять переменные как указатели, почему как обычно нельзя? ...

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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