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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.82
_mayor
1 / 1 / 0
Регистрация: 29.08.2009
Сообщений: 63
#1

strict c++ : 64 bit int - C++

30.08.2009, 15:39. Просмотров 3365. Ответов 15
Метки нет (Все метки)

strict c++ : 64 bit int

как можно задать 64 битную целую переменную?

желательно без подключения библиотек, без вывода предупреждений

интересует для g++ и msvc9express
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2009, 15:39     strict c++ : 64 bit int
Посмотрите здесь:

C++ Builder [C++ Error] Unit1.cpp(50): E2316 '_fastcall TForm1::Vector(int,int,int,int)' is not a member of 'TForm1'
error C2664: Display: невозможно преобразовать параметр 1 из 'int [5]' в 'int" C++
C++ Сannot convert ‘int (*)[10]’ to ‘int*’ for argument ‘4’ to ‘int
C++ Builder void _fastcall TForm1::Vector(int x0, int y0, int a, int l);
C++ int\ volatile int \ const int
Как понять int a(int x,int y, int z)? C++
Visual C++ отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
30.08.2009, 15:44     strict c++ : 64 bit int #2
БМП, но думаю, int в системе 64bit будет и так 64-битным.
Для 32 битных в g++ есть long long, попробуйте
_mayor
1 / 1 / 0
Регистрация: 29.08.2009
Сообщений: 63
30.08.2009, 16:01  [ТС]     strict c++ : 64 bit int #3
Цитата Сообщение от skvor Посмотреть сообщение
БМП, но думаю, int в системе 64bit будет и так 64-битным.
Для 32 битных в g++ есть long long, попробуйте
сорри забыл упомянуть, что интересует для 32 битных осей

g++ ругается на long long - как несоотвествие стандарту

зы вынужден запускать с опциями:

g++ -Wall -Wextra --pedantic
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
30.08.2009, 16:05     strict c++ : 64 bit int #4
Цитата Сообщение от _mayor Посмотреть сообщение
g++ ругается на long long - как несоотвествие стандарту
а у меня не ругается, но в его настройках, я блондинка
gcc из FreeBSD7.1
_mayor
1 / 1 / 0
Регистрация: 29.08.2009
Сообщений: 63
30.08.2009, 16:15  [ТС]     strict c++ : 64 bit int #5
Цитата Сообщение от skvor Посмотреть сообщение
а у меня не ругается, но в его настройках, я блондинка
gcc из FreeBSD7.1
это потому что блондинка

long long входит в стандарт с99, тк gcc у тебя компилит с шный код, все соотвествует стандарту

зы мне нужен int64 на 32 битной системе в строгом с++ коде

Добавлено через 2 минуты
так вроде нашел пока затычку:

g++ -Wall -Wextra --pedantic --std=c++0x

но придется обновить g++ до 4.3, вроде бы поддержку long long int ввели в драфт c++0x
CheshireCat
Эксперт С++
2910 / 1238 / 78
Регистрация: 27.05.2008
Сообщений: 3,321
30.08.2009, 16:18     strict c++ : 64 bit int #6
Совершенно верно. В C++03 (действующем) типа long long int попросту нет. В новом C++0x (надеемся все-таки 09) - это будет уже стандартный (т.е. требуемый Стандартом языка, а значит, обязательный для реализации компилятором) тип.
_mayor
1 / 1 / 0
Регистрация: 29.08.2009
Сообщений: 63
30.08.2009, 16:22  [ТС]     strict c++ : 64 bit int #7
Цитата Сообщение от CheshireCat Посмотреть сообщение
Совершенно верно. В C++03 (действующем) типа long long int попросту нет. В новом C++0x (надеемся все-таки 09) - это будет уже стандартный (т.е. требуемый Стандартом языка, а значит, обязательный для реализации компилятором) тип.
а я рискую нарваться на неприятности после смены версии компилятора, если буду в предыдущей использовать --std=c++0x ?
CheshireCat
Эксперт С++
2910 / 1238 / 78
Регистрация: 27.05.2008
Сообщений: 3,321
30.08.2009, 17:49     strict c++ : 64 bit int #8
А вот это зависит от. На сегодня тот же, например, GCC поддерживает уже многие из фич будущего Стандарта. Точнее, скажем так: драфта Стандарта. К сожалению, точно можно будет сказать только после утверждения Стандарта, что действительно вошло в финальный документ, а что - нет (так, например, уже "выпали" концепты.... - перенесены в лучшем случае в следующую версию Стандарта.) Так что, если ты будешь использовать фичу, которая из финального документа по тем или иным причинам будет выброшена - это твой риск, не факт, что компиляторы будут ее поддерживать..... Правда, разработчики компиляторов все же стремятся к обратной совместимости с более ранними версиями. Другое дело, если говорить о strict standard C++.....
Но long long int это вроде бы не грозит
M128K145
Эксперт C++
 Аватар для M128K145
8277 / 3496 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
30.08.2009, 19:29     strict c++ : 64 bit int #9
Цитата Сообщение от _mayor Посмотреть сообщение
как можно задать 64 битную целую переменную?
C++
1
__int64 a = 12345678910111213;
_mayor
1 / 1 / 0
Регистрация: 29.08.2009
Сообщений: 63
30.08.2009, 19:45  [ТС]     strict c++ : 64 bit int #10
Цитата Сообщение от M128K145 Посмотреть сообщение
C++
1
__int64 a = 12345678910111213;
это как я понимаю уже для msvc9e

зы этого компилятора пока под рукой нету, что нить инклудить для __int64 нужно?
M128K145
Эксперт C++
 Аватар для M128K145
8277 / 3496 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
30.08.2009, 20:03     strict c++ : 64 bit int #11
в 8, 9 и 10 поддерживается. А вот в 6.0, Dev-C++ и Borland C++ 3.1 такого нету. Подключать ничего не надо
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
30.08.2009, 20:42     strict c++ : 64 bit int #12
Для g++ с опцией -std=c++0x
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <cstdint>
int main()
{
    int64_t n = 123456789123456789;
    std::cout << n << std::endl;
    return 0;
}
odip
Эксперт С++
 Аватар для odip
7151 / 3291 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
30.08.2009, 23:06     strict c++ : 64 bit int #13
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <cstdint>
int main()
{
    int64_t n = 123456789123456789;
    std::cout << n << std::endl;
    return 0;
}
Чего-то этот cstdint не находится у меня.
CentOS 64-bit 5.3
родной g++ 4.1.2

И mingw-ный gcc не находит

Добавлено через 31 секунду
g++.EXE (GCC) 3.4.5 (mingw-vista special r3)

Добавлено через 3 минуты
gcc 4.2.1 тоже не находит
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
30.08.2009, 23:07     strict c++ : 64 bit int #14
У меня GCC 4.4.1. Наверно недавно ввели для C++, для Си(99) это stdint.h.
odip
Эксперт С++
 Аватар для odip
7151 / 3291 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
30.08.2009, 23:28     strict c++ : 64 bit int #15
Ну правильно - опция -std=c++0x поддерживается только с gcc 4.3

Добавлено через 8 минут
На константу ругается !
Исправленный код компилируется без ошибок БЕЗ ОПЦИИ -std и даже работает:
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <stdint.h>
int main()
{
    int64_t n = 123456789123456789LL;
    std::cout << n << std::endl;
    return 0;
}
Проверил на:
CentOS/amd64 5.3 gcc 4.1.2
FreeBSD/i386 7.2 gcc 4.2.1
mingw/i386 gcc 3.4.5

Добавлено через 3 минуты
А следующий код работает на C с использованием printf.
Это я раньше изучал проблему печати 64-битных целых.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define __STDC_FORMAT_MACROS 1
 
#include <stdio.h>
#include <inttypes.h>
 
int main( void ) {
 
int64_t n = 123456789123456789LL;
 
printf( "%" PRId64 "\n", n );
 
return 0;
 
}
Добавлено через 8 минут
Где-то в Internet мне попадался файл inttypes.h для Visual Studio 2005/2008.
Изначально этого файла нет, так как Visual Studio не поддерживает C99.
Но если его положить, то появляется тип int64_t и возможность работы с ним.
Иначе для Visual Studio приходится использовать тип __int64, но он не работает в gcc и вообще не является никаким стандартом.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2009, 16:47     strict c++ : 64 bit int
Еще ссылки по теме:

Как заполнить один int пустой массив другим int массивом ? C++
C++ Void send(int* to, int* from, int count)
Union, new placement, strict-aliasing, cross-platform C++
C++ 64 bit double to 80 bit
Как считать данные в vector<pair<int, pair<int, int>>> arr(m) ? C++

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

Или воспользуйтесь поиском по форуму:
_mayor
1 / 1 / 0
Регистрация: 29.08.2009
Сообщений: 63
31.08.2009, 16:47  [ТС]     strict c++ : 64 bit int #16
typedef unsigned long long int uint64_t;

это вернет нас к нашим баранам, потребуется либо компилить исходник в стандарте с99 через gcc, либо включать --std=c++0x в g++ >= 4.3.0

uint64_t в отличие от ms specific __int64 не является встроенным типом, а переопределяется в хидерах
Yandex
Объявления
31.08.2009, 16:47     strict c++ : 64 bit int
Ответ Создать тему
Опции темы

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