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

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 183, средняя оценка - 4.61
stranger140569
2 / 0 / 1
Регистрация: 25.01.2011
Сообщений: 27
#1

В чем разница между long int и short int - C++

28.08.2011, 22:10. Просмотров 22965. Ответов 15
Метки нет (Все метки)

Извините если вопрос нубский, но я ни как не могу понять смысл long int и short int. Например с unsingned все ясно. Один байт в int зарезервирован под знак. И если мы сообщаем компилятору что тип данных unsigned int, то он знает, что число может быть только положительным и один байт для знака можно не оставлять. А как быть с модификаторами long и short? Заранее благодарен за ответы.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.08.2011, 22:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В чем разница между long int и short int (C++):

Ошибка: invalid types ‘int[int]’ for array subscript - C++
Всем доброго дня, после компиляции выводится ошибка, которая меня вводит в ступор. #include "blitz.h" double dummy11 = 0.0; Array...

long > short ? - C++
Правда ли что long строго больше чем short ? Или существуют платформы и/или реализации, где long = short?

В чем разница между MSVC2010 и MSVC2013? - C++
Приветствую! В чем разница между MSVC2010 и MSVC2013? В чем и где это может проявиться? Что стало лучше в, наверно, следующей версии...

как проинициализировать std::stack<const int> obj ( std::stack<int>{} ); - C++
добрый день. вопрос в коде: http://rextester.com/VCVVML6656 #include &lt;iostream&gt; #include &lt;stack&gt; //-std=c++14...

strict c++ : 64 bit int - C++
strict c++ : 64 bit int как можно задать 64 битную целую переменную? желательно без подключения библиотек, без вывода...

Как привести строку типа TCHAR в int - C++
Есть строка TCHAR tmp; в ней записано число, нужно вытащить это число и записать его в переменную типа Int. Раньше я использовал для этого...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
28.08.2011, 22:13 #2
stranger140569, всё элементарно - long может хранить числа больше, чем обычный int, short же - наоборот, меньше, чем int. Есть также long long - может хранить ещё бОльшие числа.

Добавлено через 46 секунд
Эти модификаторы просто заставляют компилятор выделять больше/меньше памяти под переменную (например, если int занимает 4 байта, то long будет занимать 6, а short - 2 байта).
Денис Н.
459 / 459 / 4
Регистрация: 17.08.2011
Сообщений: 1,489
28.08.2011, 22:16 #3
В том, что шорт ограничен порядком 32к, а лонг -- 4,2 млрд беззнаковый
stranger140569
2 / 0 / 1
Регистрация: 25.01.2011
Сообщений: 27
28.08.2011, 22:19  [ТС] #4
А по диапазонам значений можно? И еще насчет знаков поподробнее, если не трудно.
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
28.08.2011, 22:26 #5
Цитата Сообщение от stranger140569 Посмотреть сообщение
А по диапазонам значений можно?
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
 
int main() {
    std::cout << "short " << (unsigned short)(-1) << "\n"
    << "int   " << (unsigned int) (-1) << "\n"
    <<  "long  " << (unsigned long) (-1) << "\n";
    return 0;
}
short 65535
int 4294967295
long 18446744073709551615

PS: x64 платформа.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
28.08.2011, 22:33 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <limits>
#include <typeinfo>
 
template< typename T >
void print_limits()
{
    std::cout << typeid(T).name() 
              << ": " << std::numeric_limits< T >::min()
              << ".." << std::numeric_limits< T >::max()
              << std::endl;
}
 
int main()
{
    print_limits< short >();
    print_limits< int >();
    print_limits< long >();
 
    return 0;
}
Добавлено через 1 минуту
Мой компилятор, кстати, int и long не различает))
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 22:37 #7
silent_1991, не все так просто. Стандарт лишь оговаривает их относительный размер, т.е.:
C++
1
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)
Получается что чисто теоретически все целые типы могут иметь размер равный 1 байту.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
28.08.2011, 22:38 #8
CyBOSSeR, да, я это знаю)) просто привёл пример, как в принципе может быть, чтобы разъяснить человеку, в чём смысл этих модификаторов.
stranger140569
2 / 0 / 1
Регистрация: 25.01.2011
Сообщений: 27
28.08.2011, 22:43  [ТС] #9
Цитата Сообщение от silent_1991 Посмотреть сообщение
Мой компилятор, кстати, int и long не различает))
Выполнил твою программу. Мой тоже их не различает. Но все равно спасибо.
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
29.08.2011, 02:33 #10
Неочевидные ответы на простые вопросы
niXman
29.08.2011, 04:15
  #11

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
std::cout << typeid(T).name()
кстати, способ деманглирования(или как это склонить?) имен: http://liveworkspace.org/code/b2c919...1731ed6fa72544

silent_1991
29.08.2011, 10:47
  #12

Не по теме:

niXman, проверял на cl, там он имена корректно выводит... g++ почему-то только сокращения))
А так, ни о заголовочнике cxxabi, ни о пространстве имён abi никогда не слышал... Это специфическая gcc-шная штука? Где можно почитать?

grizlik78
Эксперт С++
1908 / 1440 / 111
Регистрация: 29.05.2011
Сообщений: 2,996
29.08.2011, 14:07 #13
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Получается что чисто теоретически все целые типы могут иметь размер равный 1 байту.
Почему теоретически? Берём, например, компилятор от ADSP-21160, там
sizeof(char) == sizeof(short) == sizeof(int) == sizeof(long) == 1
Правда char при этом 32-битный
Впрочем, по приведённой ссылке про это упомянуто.
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
29.08.2011, 14:27 #14
Цитата Сообщение от grizlik78 Посмотреть сообщение
ADSP-21160, там
sizeof(char) == sizeof(short) == sizeof(int) == sizeof(long) == 1
жуть какая %)

Добавлено через 1 минуту
Цитата Сообщение от silent_1991 Посмотреть сообщение
g++ почему-то только сокращения
ну да. такой он)

Цитата Сообщение от silent_1991 Посмотреть сообщение
ни о заголовочнике cxxabi, ни о пространстве имён abi никогда не слышал
сам недавно в кодах некоторого опенсорс проекта такое увидел)

Цитата Сообщение от silent_1991 Посмотреть сообщение
Это специфическая gcc-шная штука? Где можно почитать?
не знаю. не знаю.
наверное гугл знает

Добавлено через 1 минуту
а вот: http://gcc.gnu.org/onlinedocs/libstd...emangling.html
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
30.08.2011, 08:26 #15
Есть еще тип int64_t
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2011, 08:26
Привет! Вот еще темы с ответами:

Как вызвать exception во время переполнения типа int - C++
такая задача, нужно что бы во время присваивания переменной типа int чисел больших чем допустимые вызвалось именно исключение, ибо сейчас у...

После int функции переменная, проинициализированная снаружи, не обновляется - C++
Здравствуйте. Собственно сабж. Обработчик события нажатия на кнопку. Gener G(1,1); int...

Почему иногда функции передается значение int, а иногда - нет? - C++
1 случай: void Function_1(int* &amp; rVarOne, int* &amp;rVarTwo) { /* Какие-то операции с указателями: rVarOne++; *rVarOne =...

void _fastcall TForm1::Vector(int x0, int y0, int a, int l); - C++ Builder
//--------------------------------------------------------------------------- #include &quot;DateUtils.hpp&quot; // для доступа к SecondOf,...


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

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

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