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

Тип данных long

07.02.2015, 12:08. Показов 12459. Ответов 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
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
08.02.2015, 13:55
Студворк — интернет-сервис помощи студентам
https://www.cyberforum.ru/blogs/18334/blog69.html
0
 Аватар для globalhost
32 / 24 / 7
Регистрация: 01.08.2014
Сообщений: 115
08.02.2015, 17:36
Собственно, а почему int быстрее?

Code
1
2
3
long a = 10;
long b = 20;
long c = a + b;
В выражении a + b компилятор приводит переменные к int, применяет оператор сложения и приводит переменные обратно к типу long.

Code
1
2
3
int a = 10;
int b = 20;
int c = a + b;
Вычисления с int не нуждается в таких преобразованиях.
Потому, при одинаковой величине типов, предпочтительнее использовать int.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
08.02.2015, 18:16
Цитата Сообщение от globalhost Посмотреть сообщение
В выражении a + b компилятор приводит переменные к int,
неплохо бы, хотя бы ассемблерный листинг предоставить
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
08.02.2015, 23:16
Цитата Сообщение от globalhost Посмотреть сообщение
В выражении a + b компилятор приводит переменные к int
Цитата Сообщение от ValeryS Посмотреть сообщение
неплохо бы, хотя бы ассемблерный листинг предоставить
Зачем? Очевидно же, что это не так.
5/9 Expressions [expr]
If both operands have the same type, no further conversion is needed.
0
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 732
08.02.2015, 23:40
Цитата Сообщение от DrOffset Посмотреть сообщение
Если для x64, тот тут возможны варианты.
Вроде, обычно все же 64 бита в long?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
08.02.2015, 23:43
Цитата Сообщение от AndrSlav Посмотреть сообщение
Вроде, обычно все же 64 бита в long?
Картинка по твоей же ссылке говорит что возможны варианты.
Миниатюры
Тип данных long  
0
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 732
08.02.2015, 23:48
Tulosba, да, но 32 - одна строка из четырех Правда, может, в процентном соотношении все не так выглядит.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
08.02.2015, 23:54
Цитата Сообщение от AndrSlav Посмотреть сообщение
одна строка из четырех
зато какая. винда ж
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
09.02.2015, 00:04
интересно а такая шняга сработает
допустим мне нужна переменная на 64 бита
и я не знаю об int64_t
C++
1
2
3
4
5
6
#if (sizeof(long)==4)
//как вариант #if sizeof (long)==sizeof(int)
long long a;
#else
long a;
#endif
вопрос чисто теоретический, навеянный данными рассуждениями
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
09.02.2015, 00:11
ValeryS, sizeof в препроцессор не засунешь.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
09.02.2015, 00:18
Tulosba, а как бы узнать размерность в препроцессоре?
0
2 / 2 / 1
Регистрация: 06.02.2015
Сообщений: 19
09.02.2015, 03:20
Цитата Сообщение от ValeryS Посмотреть сообщение
а как бы узнать размерность в препроцессоре?
Например, из документации к используемому компилятору.
0
 Аватар для gromo
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
09.02.2015, 03:47
Цитата Сообщение от ValeryS Посмотреть сообщение
а как бы узнать размерность в препроцессоре?
Так вроде бы это обязанность препроцессора в gcc-семье знать размеры типов при помощи builitin макросов.
Bash
1
2
3
$ uname -a
Linux x 3.18.6-1-ARCH #1 SMP PREEMPT Sat Feb 7 08:44:05 CET 2015 x86_64 GNU/Linux
$ cpp -xc++ -dM /dev/null | grep SIZEOF
Вывод:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
#define __SIZEOF_INT__ 4
#define __SIZEOF_POINTER__ 8
#define __SIZEOF_LONG__ 8
#define __SIZEOF_LONG_DOUBLE__ 16
#define __SIZEOF_SIZE_T__ 8
#define __SIZEOF_WINT_T__ 4
#define __SIZEOF_PTRDIFF_T__ 8
#define __SIZEOF_FLOAT__ 4
#define __SIZEOF_SHORT__ 2
#define __SIZEOF_INT128__ 16
#define __SIZEOF_WCHAR_T__ 4
#define __SIZEOF_DOUBLE__ 8
#define __SIZEOF_LONG_LONG__ 8
Следовательно, в соответствии с твоим кодом, - будет как-то так:
C++
1
2
3
4
5
#if __SIZEOF_LONG__ ==  __SIZEOF_INT__ 
    long long a;
#else 
    long a;
#endif
1
 Аватар для globalhost
32 / 24 / 7
Регистрация: 01.08.2014
Сообщений: 115
09.02.2015, 04:31
Цитата Сообщение от Tulosba Посмотреть сообщение
5/9 Expressions [expr]
If both operands have the same type, no further conversion is needed.
Хмм. Любопытно. А на компиляторы старше 2011 это тоже распространяется?
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
09.02.2015, 06:17
Интересно, кроме char <= short <= int <= long <= long long стандарт еще что-то гарантирует насчет размеров?
Когда-то, давно-давно, я читал, что short вмещает 16 бит, а long 32 бита (long long тогда не было).
Судя по табличке, long long де-факто вмещает 64, а int в большинстве случаев вмещает 32.
Может, теперь int по стандарту >=32?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
09.02.2015, 06:43
Цитата Сообщение от zer0mail Посмотреть сообщение
еще что-то гарантирует насчет размеров?
нет
Цитата Сообщение от Calendum Посмотреть сообщение
Например, из документации к используемому компилятору.
этак я что каждую программу под компилятор должен подгонять?
если я стану оглядываться на компилятор то зачем мне эти головняки,я и так размер знаю

Добавлено через 59 секунд
Цитата Сообщение от zer0mail Посмотреть сообщение
Может, теперь int по стандарту >=32?
для 8битных микроконтроллеров так и остался 16бит
1
2 / 2 / 1
Регистрация: 06.02.2015
Сообщений: 19
09.02.2015, 07:04
Цитата Сообщение от ValeryS Посмотреть сообщение
этак я что каждую программу под компилятор должен подгонять?
если я стану оглядываться на компилятор то зачем мне эти головняки,я и так размер знаю
Если предполагается сборка программы из исходников конечными пользователями под разные архитектуры/ОСи, то не обойтись без подобных изысков:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifdef HAVE_SIGNAL_H
#include <signal.h>
#endif
 
#ifdef HAVE_CTYPE_H
#include <ctype.h>
#endif
 
#if defined(UNIX)
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/file.h>
#endif
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
09.02.2015, 08:24
Цитата Сообщение от gromo Посмотреть сообщение
Так вроде бы это обязанность препроцессора в gcc-семье знать размеры типов при помощи builitin макросов
На самом деле это не так. Эти макросы - для внутреннего использования для настройки внутри хидеров типа typedef.h или libstdc++ (которая является внутренней библиотекой, поставляемой вместе с компилятором), пользователю по-хорошему ими пользоваться нельзя, потому что компилятор не гарантирует, что начиная с некоторой версии маросы не пропадут
0
 Аватар для Voivoid
710 / 284 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
09.02.2015, 09:26
Цитата Сообщение от ValeryS Посмотреть сообщение
этак я что каждую программу под компилятор должен подгонять?
http://www.cplusplus.com/reference/cstdint/
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.02.2015, 10:07
С введением long long поторопились, однако, если типы друг друга дублируют. short/int/long достаточно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.02.2015, 10:07

Создать абстрактный тип данных - класс вектор, который имеет указатель на 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?
Мне бы какой нибудь тривиальный пример в Си. Спасибо:)


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru