Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/55: Рейтинг темы: голосов - 55, средняя оценка - 4.87
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 25
1

Тип данных long

07.02.2015, 12:08. Показов 11265. Ответов 47
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.

1) long - это новый тип данных в c++?
2) Если первое верно, зачем вводить новый тип данных, если есть такой же int?
3) Если первое неверно, в чем отличие long от int?

Если я правильно понял, long - это long int. В языке C нет типа данных long, там int и long int. Вопрос: почему при компиляции переменной с типом long в языке C не выдается ошибка?

Спасибо.
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.02.2015, 12:08
Ответы с готовыми решениями:

Тип long long и его ввод\вывод с использованием scanf\printf
Добрый день! Мне в программе надо вывести и ввести, соответственно, некоторые данные с помощью...

Тип unsigned long long
Добрый день. У меня возник вопрос: Почему в результате выполнения программы выводится число: -1?...

Требуется написать функцию long long pow(long long a, unsigned int p), которая возводит число a в степень p
Требуется написать функцию long long pow(long long a, unsigned int p), которая возводит число a в...

Создать абстрактный тип данных - класс вектор, который имеет указатель на long, число элементов и переменную состояния
Помогите пожалуйста, нужно написать код на с++ Создать абстрактный тип данных - класс вектор,...

47
63 / 63 / 47
Регистрация: 08.09.2013
Сообщений: 187
Записей в блоге: 1
07.02.2015, 12:13 2
long - это не новый тип данных.
long и long int - это одно и то же.
Отличие long int от int, в том, что переменная может вмещать более крупные числа.
По нарастающей
short int -> int -> long int -> long long int
0
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 25
07.02.2015, 12:18  [ТС] 3
Ouroboros-SK, да, но размер int и long одинаков: 4 байта - и диапазон у них одинаковый.
0
63 / 63 / 47
Регистрация: 08.09.2013
Сообщений: 187
Записей в блоге: 1
07.02.2015, 12:18 4
Поскольку в языке С есть тип данных long int, то не возникает ошибки, при обьявлении просто long.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
07.02.2015, 12:21 5
В С++ есть тип данных long и int. Причем тут пост выше незнаю)).
Гарантии языка:
char <= short <= int <= long <= long long

А так их размеры определяют компиляторы. Дело с int в том, что оно равно машинному слову( зависит от регистра процессора, регистра шины процессора и регистра ОС).

На данный момент long и int по 32 бита. Несколько лет назад int был 16 бит, к примеру.
2
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 25
07.02.2015, 12:29  [ТС] 6
rikimaru2013, т.е int заточен под конкретные возможности данного компьютера? Тогда и long также изменяем...
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
07.02.2015, 12:31 7
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
На данный момент long и int по 32 бита.
Зависит от платформы.
Bash
1
2
3
4
5
6
7
8
9
10
11
$ cat main.cpp
#include <iostream>
 
int main() {
    std::cout << "sizeof int: " << sizeof(int) << std::endl
        << "sizeof long: " << sizeof(long) << std::endl;
}
 
$ g++ main.cpp && ./a.out
sizeof int: 4
sizeof long: 8
1
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 25
07.02.2015, 12:35  [ТС] 8
0x10, нет int: 4, long: 4
У меня они одинаковые.
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
07.02.2015, 12:36 9
Цитата Сообщение от idi Посмотреть сообщение
нет
Еще раз говорю:
Цитата Сообщение от 0x10 Посмотреть сообщение
Зависит от платформы.
0
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
07.02.2015, 12:38 10
Цитата Сообщение от idi Посмотреть сообщение
под конкретные возможности данного компьютера
Не компьютера, а архитектуры. Например компилятор под х86-архитектуры (32 бита), будет считать int - 32 разряда, а long == int. Какой-нибудь компилятор для x86 (16 бит), например для DOS, будет считать int - 16 разрядов, а long - 32.
Для строгой гарантии стандартом предусмотрены специальные типы с указанием размерности. int32_t, int16_t и т.п.

Добавлено через 36 секунд
Цитата Сообщение от idi Посмотреть сообщение
нет int: 4, long: 4
У меня они одинаковые.
Это частный случай для 32-разрядной x86 платформы.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
07.02.2015, 12:38 11
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
В С++ есть тип данных long и int.
long это прилагательное(длинный)
есть
short int
int
long int
long long int, в этом не уверен стандартизирован ли он
допускается слово int опускать
например short тоже самое что short int
long int тоже самое что long
также как unsigned тоже самое что unsigned int
гарантировано что
short int не больше чем int
int не больше, чем long int
long int не больше чем long long int

но!!!long double нельзя написать long, это будет другой тип
1
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
07.02.2015, 12:40 12
Цитата Сообщение от ValeryS Посмотреть сообщение
long long int, в этом не уверен стандартизирован ли он
Теперь да.
Цитата Сообщение от ValeryS Посмотреть сообщение
но!!!long double нельзя написать
Можно.
0
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 25
07.02.2015, 12:41  [ТС] 13
Что-то тут не то.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
07.02.2015, 12:42 14
Цитата Сообщение от idi Посмотреть сообщение
0x10, нет int: 4, long: 4
У меня они одинаковые.
и что?
Цитата Сообщение от 0x10 Посмотреть сообщение
Зависит от платформы.
например на 16 битных процессорах
int размер 16 бит (2 байта)
long int размер 32 (4 байта)
конкретный размер стандарт не гарантирует
так же как char это минимальный элемент равен байту, а в байте не обязательно 8 бит

Добавлено через 53 секунды
Цитата Сообщение от DrOffset Посмотреть сообщение
Можно.
дальше то читай
вместо long double нельзя написать long
0
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 25
07.02.2015, 12:43  [ТС] 15
Цитата Сообщение от DrOffset Посмотреть сообщение
Это частный случай для 32-разрядной x86 платформы.
Да, но у меня 64 разрядная)
0
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
07.02.2015, 12:44 16
Цитата Сообщение от ValeryS Посмотреть сообщение
вместо long double нельзя написать long
Тогда у тебя пропущено слово "вместо" в исходном посте.
0
ValeryS
07.02.2015, 12:50
  #17

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Тогда у тебя пропущено слово "вместо" в исходном посте.
Что да, то да
коряво получилось:(

0
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
07.02.2015, 12:54 18
Цитата Сообщение от idi Посмотреть сообщение
Да, но у меня 64 разрядная)
А компилятор для какой платформы? Если 32, то и думать нечего.
Если для x64, тот тут возможны варианты. Например разрядность для long могли оставить 4 байта из соображений совместимости, т.к. 32-разрядные архитектуры очень долго держались в качестве основных на рынке PC, и чтобы не ломать старый код, создатели компиляторов решили оставить разрядность в прежнем виде, даже для x64. Но на других архитектурах, например ARM или MIPS, этого может не быть.
Вот ссылка для справки. См. таблицу в середине статьи. Там хорошо видно, что для windows x64 (64) решено оставить разрядность такой-же, как была для x86 (32). Но на *NIX уже все честно и long стал 64-разрядным.
1
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 25
07.02.2015, 12:55  [ТС] 19
Цитата Сообщение от DrOffset Посмотреть сообщение
А компилятор для какой платформы? Если 32, то и думать нечего.
Если для x64, тот тут возможны варианты. Например разрядность для long могли оставить 4 байта из соображений совместимости, т.к. 32-разрядные архитектуры очень долго держались в качестве основных на рынке PC, и чтобы не ломать старый код, создатели компиляторов решили оставить разрядность в прежнем виде, даже для x64. Но на других архитектурах, например ARM или MIPS, этого может не быть.
Вот ссылка для справки. См. таблицу в середине статьи. Там хорошо видно, что для windows x64 (64) решено оставить разрядность такой-же, как была для x86 (32).
Понял, спасибо.
0
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
07.02.2015, 12:57 20
idi, стандарт гарантирует только
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
char <= short <= int <= long <= long long
Остальное зависит от реализации компилятора, под заданную платформу. Если нужны более строгие гарантии, я уже написал, что есть специальные типы для этого (int8_t, int16_t, int32_t и int64_t - доступны при подключении <stdint.h>\<cstdint>).
0
07.02.2015, 12:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2015, 12:57
Помогаю со студенческими работами здесь

Не понятный undefined reference to `unsigned long long f<unsigned long long, void>
test.cpp: #include &lt;iostream&gt; template &lt;typename FormalType, typename FactType = typename...

Char, short, int, long: какой тип выбрать?
Всем привет Читая книги по C++ столкнулся с тем, что везде пишут примерно одно и тоже. Допустим...

Чем различаются long long и long double?
long long или long double

Как написать функцию c типом long double возвращаюшую тип shot?
Мне бы какой нибудь тривиальный пример в Си. Спасибо:)


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru