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

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

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

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

14.06.2012, 18:44. Просмотров 4893. Ответов 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
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 1
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
На сколько мне известно: Win - LLP64, unix-подобные - LP64.
2
Evg
Эксперт CАвтор FAQ
18261 / 6386 / 440
Регистрация: 30.03.2009
Сообщений: 17,671
Записей в блоге: 28
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
koder
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
17.06.2012, 18:52  [ТС] #18
Цитата Сообщение от Somebody Посмотреть сообщение
Кто так говорит? char, signed char и unsigned char в C++ - три разных, но int и signed int - одно и то же.
Так у char и signed char одинаковый диапазон, но при этом другой размер или ещё что то?

Добавлено через 17 минут
Цитата Сообщение от Evg Посмотреть сообщение
signed, unsigned, short, long по своей сути НЕ являются модификаторами типов. Это ключевые слова, которые задают разные типы. Т.е. "short int" НЕ надо рассматривать как тип int с модификаторам, а следует рассматривать просто как отдельный целочисленный тип. Каждый целочисленный тип обладает двумя основными характеристиками: размер и знаковость. Размер определяет то, сколько бит отводится для хранения числа. Чем больше бит, чем бОльший диапазон значений можно хранить в данном типе. Знаковость числа влияет на то, как число будет трактоваться. Более подробно описывал в посте N11 в данной теме: Signed/Unsigned. Но лучше всю тему просмотри

Ну и так, для порядку: http://www.cyberforum.ru/blogs/18334/blog69.html
Спасибо за статью.А что тогда понимать под модификаторами?
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
17.06.2012, 19:07 #19
Цитата Сообщение от koder Посмотреть сообщение
char и signed char
это 1 и то же

Цитата Сообщение от koder Посмотреть сообщение
А что тогда понимать под модификаторами?
extern, static, register, const etc...
0
Evg
Эксперт CАвтор FAQ
18261 / 6386 / 440
Регистрация: 30.03.2009
Сообщений: 17,671
Записей в блоге: 28
17.06.2012, 19:19 #20
Цитата Сообщение от koder Посмотреть сообщение
Так у char и signed char одинаковый диапазон, но при этом другой размер или ещё что то?
В статье об этом написано. Это два разных типа но с одинаковыми характеристиками (на большинстве компиляторов).

Добавлено через 2 минуты
Цитата Сообщение от OstapBender Посмотреть сообщение
это 1 и то же
Запусти данный код на Си++ и увидишь, что это не так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
void func (char c)
{
  std::cout << "aaa\n";
}
 
void func (signed char c)
{
  std::cout << "bbb\n";
}
 
int main (void)
{
  char c = 0;
  signed char sc = 0;
 
  func (c);
  func (sc);
}
1
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
17.06.2012, 22:20 #21
Evg, Согласен, компилируется. Забавно, но не вижу, где в реальной жизни такое может пригодиться.
0
Evg
Эксперт CАвтор FAQ
18261 / 6386 / 440
Регистрация: 30.03.2009
Сообщений: 17,671
Записей в блоге: 28
17.06.2012, 22:25 #22
Цитата Сообщение от OstapBender Посмотреть сообщение
Забавно, но не вижу, где в реальной жизни такое может пригодиться
На "обычных" процессорах - скорее всего нигде. Но в мире дофига всяких необычных процессоров, где свои хитроумные программные соглашения. Может где-то там оно и используется
0
17.06.2012, 22:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2012, 22:25
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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