3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
|
|
1 | |
Зачем нужны модификаторы типов?14.06.2012, 18:44. Показов 9542. Ответов 21
Метки нет (Все метки)
Читаю Шилдта и все более менее понятно,но насчет unsigned , signed , shot , long что то вообще дыра в понимании и их пропускал,а потом пришлось вернутся.Наверно это из-за того,что для меня не понятны многие моменты и их описания.Например,что за таблица,в которой написаны : типы,биты,диапазон?Биты - размер,но не ясно зачем знать какой он и где это применяется.Диапазон - ^_^,к примеру что это -128 127 и опять же зачем?Книжку ещё не дочитал и может забегаю на перед,но Шилдт так уверено примеры дает и пишет о них,что кажется я уже должен ясно понимать о чем идет речь.Пожалуйста объясните максимально подробно и понятно(гугл не помог).
0
|
14.06.2012, 18:44 | |
Ответы с готовыми решениями:
21
Для чего нужны модификаторы protected, private, public Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? Зачем нужны перечисления в С++? Зачем нужны исключения? |
Модератор
|
|
14.06.2012, 19:30 | 2 |
1) Числа со знаком называются "signed". Как ты знаешь, знак числа занимает один бит. Рассмотрим байт. В нем 8 бит. Если старший бит использовать для знака, то на число остаётся 7 бит. В семи битах можно максимально уместить число 127. Если же знак не используется, то числа наз. "unsigned". Беззнаковые числа всегда неотрицательны. В тех же 8 битах можно разместить число от 0 до 255.
2) short и long обеспечивают нужный диапазон чисел. Так short может быть двухбайтовым целым, а long - 4-байтовым (это зависит от реализации языка)
1
|
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
|
|
14.06.2012, 20:22 [ТС] | 3 |
Ясно,ну а где это все пригодится?
0
|
21 / 21 / 7
Регистрация: 16.09.2009
Сообщений: 111
|
|
14.06.2012, 20:37 | 4 |
Сообщение было отмечено как решение
Решение
При программировании пригодиться))
short используется для экономии памяти, если у тебя очень большой массив данных храниться, допустим на 10^9 элементов, то int займёт 4 Гб, а short в 2 раза меньше(хотя на некоторых компах int=short). long используется если тебе не достаточно диапозона inta, например тебе надо хранить числа порядка 10^10. Если ты попытаешься сохранить такое число в int, то у тебя будет переполнение и в результате ты не сможешь восстановить то число, которое сохранил в переменную. unsigned используется в тех случаях, когда ты точно знаешь что в данную переменную не будешь записывать отрицательные числа(для экономии того самого знакового бита). Во всех языках программирования есть разние типы данных, разного диапозона. Беззнаковые типы тоже встречаются во многих языках, но в некоторых нет, например java.
3
|
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
|
|
14.06.2012, 21:03 [ТС] | 5 |
Интересно для каких это проектов понадобится).Ну суть понята спасибо,странно что Шилдт этой теме уделяет время в книге для начинающих ибо без реальной задачи с оптимизацией тяжело разобраться.
0
|
385 / 229 / 12
Регистрация: 06.07.2011
Сообщений: 512
|
|
14.06.2012, 21:09 | 6 |
C и C++ имеют низкоуровневые методы, поэтому таким вещам учить необходимо. В большинстве случаев можно обойтись int и double. Но когда для задачи оказывается критически важными объем памяти, точность вычислений, либо взаимодействие с другими платформами/технологиями, то знать столь низкоуровневую информацию о типах нужно.
0
|
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
|
|
14.06.2012, 21:34 [ТС] | 7 |
Я и не спорю о таком,конечно нужно,но имхо для новичка в книге Шилдта слишком поверхностная подача этих низкоуровневых методов,если уж без глубины описывать что то,то лучше совсем не писать.
0
|
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
14.06.2012, 22:02 | 8 |
Только long обычно не больше 4 байт, так что 10^10 в него скорее всего не влезет.
0
|
21 / 21 / 7
Регистрация: 16.09.2009
Сообщений: 111
|
|
15.06.2012, 16:53 | 9 |
Возьмите любую другую книжку, даже по тому же Паскалю... Везде среди первых глав вы найдёте описание типов данного языка. Так заведено, привыкайте)
Я же образно, цифры с потолка брал, чтобы пояснить разницу между long и int(Хотя зачастую в них и вправду разницы нет, зависит от процессора) 4*10^9 влезит)
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||||||||||
16.06.2012, 06:48 | 11 | ||||||||||
signed - это знаковый, unsigned - беззнаковый.
Добавлено через 55 секунд Ну а если ты с дуру введёшь 200? Добавлено через 3 минуты long займёт больше, чем short. Во сколько раз - вопрос отдельный. Обычно в два. А может в четыре? А вот int займёт ровно столько же, сколько или short, или long. Добавлено через 2 минуты А short - 4-х? Врядли. И int там обычно 4 байта. Разрядность повышали не для арифметики, а для адреса и мемсайзных типов. То есть для памяти и количества данных: аддерсное пространство x64 = 16ЭБ. Добавлено через 1 минуту А при чём здесь вообще оптимизация?
2
|
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
|
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
17.06.2012, 17:03 | 13 |
Кто так говорит? char, signed char и unsigned char в C++ - три разных, но int и signed int - одно и то же.
0
|
17.06.2012, 17:15 | 14 |
signed, unsigned, short, long по своей сути НЕ являются модификаторами типов. Это ключевые слова, которые задают разные типы. Т.е. "short int" НЕ надо рассматривать как тип int с модификаторам, а следует рассматривать просто как отдельный целочисленный тип. Каждый целочисленный тип обладает двумя основными характеристиками: размер и знаковость. Размер определяет то, сколько бит отводится для хранения числа. Чем больше бит, чем бОльший диапазон значений можно хранить в данном типе. Знаковость числа влияет на то, как число будет трактоваться. Более подробно описывал в посте N11 в данной теме: Signed/Unsigned. Но лучше всю тему просмотри
Ну и так, для порядку: https://www.cyberforum.ru/blogs/18334/blog69.html Бред. В 64-разрядных режимах short=2, int=4, long=8
1
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
17.06.2012, 17:32 | 15 |
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
17.06.2012, 17:54 | 16 |
Зависит от архитектуры системы, в Win, например, long останется 4 байтным.
Вот примерная таблица: Код
// Data models // Data Type LP32 ILP32 SILP64 ILP64 LLP64 LP64 // char 8 8 8 8 8 8 // short 16 16 64 16 16 16 // int 16 32 64 64 32 32 // long 32 32 64 64 32 64 // long long (int64) 64 64 64 64 64 64 // pointer 32 32 64 64 64 64 // __int8 8 8 8 8 8 8 // __int16 16 16 16 16 16 16 // __int32 32 32 32 32 32 32 // __int64 64 64 64 64 64 64
2
|
17.06.2012, 18:21 | 17 |
На всякий случай, не всем очевидно. LP64 означает, что Long и Pointer имеют размер 64 бита (long long автоматически 64-битный, т.к. он должен быть больше или равен long'у, других 64-битных целочисленных типов нет). LLP64 - Long Long и Pointer имеют размер 64 (других 64-битных целочисленных типов нет). Мне всегда казалось, что 32-битные коды под винду и под юникс - это LP32, а 64-битные под винду и под юникс - LP64. Это две основные настройки современных 32- и 64-битных режимов. Но 64-битной винды нет, чтобы проверить, всё остальное (32- под винду и юникс, 64- под юникс) - верно
0
|
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
|
|
17.06.2012, 18:52 [ТС] | 18 |
Так у char и signed char одинаковый диапазон, но при этом другой размер или ещё что то?
Добавлено через 17 минут Спасибо за статью.А что тогда понимать под модификаторами?
0
|
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
|
|
17.06.2012, 19:07 | 19 |
0
|
17.06.2012, 19:19 | 20 | |||||
В статье об этом написано. Это два разных типа но с одинаковыми характеристиками (на большинстве компиляторов).
Добавлено через 2 минуты Запусти данный код на Си++ и увидишь, что это не так
1
|
17.06.2012, 19:19 | |
17.06.2012, 19:19 | |
Помогаю со студенческими работами здесь
20
Зачем нужны скобочки? Зачем нужны макросы? Зачем нужны указатели Зачем нужны сортировки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |