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

Тип данных long

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

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

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

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

Спасибо.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2015, 12:08
Ответы с готовыми решениями:

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

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

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

47
 Аватар для Ouroboros-SK
63 / 63 / 47
Регистрация: 08.09.2013
Сообщений: 187
Записей в блоге: 1
07.02.2015, 12:13
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  [ТС]
Ouroboros-SK, да, но размер int и long одинаков: 4 байта - и диапазон у них одинаковый.
0
 Аватар для Ouroboros-SK
63 / 63 / 47
Регистрация: 08.09.2013
Сообщений: 187
Записей в блоге: 1
07.02.2015, 12:18
Поскольку в языке С есть тип данных long int, то не возникает ошибки, при обьявлении просто long.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
07.02.2015, 12:21
В С++ есть тип данных 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  [ТС]
rikimaru2013, т.е int заточен под конкретные возможности данного компьютера? Тогда и long также изменяем...
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
07.02.2015, 12:31
Цитата Сообщение от 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  [ТС]
0x10, нет int: 4, long: 4
У меня они одинаковые.
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
07.02.2015, 12:36
Цитата Сообщение от idi Посмотреть сообщение
нет
Еще раз говорю:
Цитата Сообщение от 0x10 Посмотреть сообщение
Зависит от платформы.
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
07.02.2015, 12:38
Цитата Сообщение от 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
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
07.02.2015, 12:38
Цитата Сообщение от 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
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
07.02.2015, 12:40
Цитата Сообщение от ValeryS Посмотреть сообщение
long long int, в этом не уверен стандартизирован ли он
Теперь да.
Цитата Сообщение от ValeryS Посмотреть сообщение
но!!!long double нельзя написать
Можно.
0
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 25
07.02.2015, 12:41  [ТС]
Что-то тут не то.
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
07.02.2015, 12:42
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Это частный случай для 32-разрядной x86 платформы.
Да, но у меня 64 разрядная)
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
07.02.2015, 12:44
Цитата Сообщение от ValeryS Посмотреть сообщение
вместо long double нельзя написать long
Тогда у тебя пропущено слово "вместо" в исходном посте.
0
07.02.2015, 12:50

Не по теме:

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

0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
07.02.2015, 12:54
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
А компилятор для какой платформы? Если 32, то и думать нечего.
Если для x64, тот тут возможны варианты. Например разрядность для long могли оставить 4 байта из соображений совместимости, т.к. 32-разрядные архитектуры очень долго держались в качестве основных на рынке PC, и чтобы не ломать старый код, создатели компиляторов решили оставить разрядность в прежнем виде, даже для x64. Но на других архитектурах, например ARM или MIPS, этого может не быть.
Вот ссылка для справки. См. таблицу в середине статьи. Там хорошо видно, что для windows x64 (64) решено оставить разрядность такой-же, как была для x86 (32).
Понял, спасибо.
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
07.02.2015, 12:57
idi, стандарт гарантирует только
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
char <= short <= int <= long <= long long
Остальное зависит от реализации компилятора, под заданную платформу. Если нужны более строгие гарантии, я уже написал, что есть специальные типы для этого (int8_t, int16_t, int32_t и int64_t - доступны при подключении <stdint.h>\<cstdint>).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2015, 12:57
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru