Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/20: Рейтинг темы: голосов - 20, средняя оценка - 4.50
_mayor
1 / 1 / 1
Регистрация: 29.08.2009
Сообщений: 63
1

strict c++ : 64 bit int

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

strict c++ : 64 bit int

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

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

интересует для g++ и msvc9express
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2009, 15:39
Ответы с готовыми решениями:

Union, new placement, strict-aliasing, cross-platform
Доброго времени суток. Ниже представленный код вроде бы работает. Гонял его...

В чем разница между long int и short int
Извините если вопрос нубский, но я ни как не могу понять смысл long int и short...

Ошибка: invalid types ‘int[int]’ for array subscript
Всем доброго дня, после компиляции выводится ошибка, которая меня вводит в...

Как проинициализировать std::stack<const int> obj ( std::stack<int>{} );
добрый день. вопрос в коде: http://rextester.com/VCVVML6656 #include...

void _fastcall TForm1::Vector(int x0, int y0, int a, int l);
//---------------------------------------------------------------------------...

15
skvor
640KB мне хватило на всё.
118 / 49 / 3
Регистрация: 07.06.2009
Сообщений: 442
30.08.2009, 15:44 2
БМП, но думаю, int в системе 64bit будет и так 64-битным.
Для 32 битных в g++ есть long long, попробуйте
0
_mayor
1 / 1 / 1
Регистрация: 29.08.2009
Сообщений: 63
30.08.2009, 16:01  [ТС] 3
Цитата Сообщение от skvor Посмотреть сообщение
БМП, но думаю, int в системе 64bit будет и так 64-битным.
Для 32 битных в g++ есть long long, попробуйте
сорри забыл упомянуть, что интересует для 32 битных осей

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

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

g++ -Wall -Wextra --pedantic
0
skvor
640KB мне хватило на всё.
118 / 49 / 3
Регистрация: 07.06.2009
Сообщений: 442
30.08.2009, 16:05 4
Цитата Сообщение от _mayor Посмотреть сообщение
g++ ругается на long long - как несоотвествие стандарту
а у меня не ругается, но в его настройках, я блондинка
gcc из FreeBSD7.1
0
_mayor
1 / 1 / 1
Регистрация: 29.08.2009
Сообщений: 63
30.08.2009, 16:15  [ТС] 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
0
CheshireCat
Эксперт С++
2912 / 1261 / 114
Регистрация: 27.05.2008
Сообщений: 3,464
30.08.2009, 16:18 6
Совершенно верно. В C++03 (действующем) типа long long int попросту нет. В новом C++0x (надеемся все-таки 09) - это будет уже стандартный (т.е. требуемый Стандартом языка, а значит, обязательный для реализации компилятором) тип.
1
_mayor
1 / 1 / 1
Регистрация: 29.08.2009
Сообщений: 63
30.08.2009, 16:22  [ТС] 7
Цитата Сообщение от CheshireCat Посмотреть сообщение
Совершенно верно. В C++03 (действующем) типа long long int попросту нет. В новом C++0x (надеемся все-таки 09) - это будет уже стандартный (т.е. требуемый Стандартом языка, а значит, обязательный для реализации компилятором) тип.
а я рискую нарваться на неприятности после смены версии компилятора, если буду в предыдущей использовать --std=c++0x ?
0
CheshireCat
Эксперт С++
2912 / 1261 / 114
Регистрация: 27.05.2008
Сообщений: 3,464
30.08.2009, 17:49 8
А вот это зависит от. На сегодня тот же, например, GCC поддерживает уже многие из фич будущего Стандарта. Точнее, скажем так: драфта Стандарта. К сожалению, точно можно будет сказать только после утверждения Стандарта, что действительно вошло в финальный документ, а что - нет (так, например, уже "выпали" концепты.... - перенесены в лучшем случае в следующую версию Стандарта.) Так что, если ты будешь использовать фичу, которая из финального документа по тем или иным причинам будет выброшена - это твой риск, не факт, что компиляторы будут ее поддерживать..... Правда, разработчики компиляторов все же стремятся к обратной совместимости с более ранними версиями. Другое дело, если говорить о strict standard C++.....
Но long long int это вроде бы не грозит
0
M128K145
Эксперт JavaЭксперт С++
8326 / 3547 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
30.08.2009, 19:29 9
Цитата Сообщение от _mayor Посмотреть сообщение
как можно задать 64 битную целую переменную?
C++
1
__int64 a = 12345678910111213;
0
_mayor
1 / 1 / 1
Регистрация: 29.08.2009
Сообщений: 63
30.08.2009, 19:45  [ТС] 10
Цитата Сообщение от M128K145 Посмотреть сообщение
C++
1
__int64 a = 12345678910111213;
это как я понимаю уже для msvc9e

зы этого компилятора пока под рукой нету, что нить инклудить для __int64 нужно?
0
M128K145
Эксперт JavaЭксперт С++
8326 / 3547 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
30.08.2009, 20:03 11
в 8, 9 и 10 поддерживается. А вот в 6.0, Dev-C++ и Borland C++ 3.1 такого нету. Подключать ничего не надо
0
Gravity
569 / 563 / 64
Регистрация: 29.01.2009
Сообщений: 1,274
30.08.2009, 20:42 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;
}
0
odip
Эксперт С++
7162 / 3221 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
30.08.2009, 23:06 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 тоже не находит
0
Gravity
569 / 563 / 64
Регистрация: 29.01.2009
Сообщений: 1,274
30.08.2009, 23:07 14
У меня GCC 4.4.1. Наверно недавно ввели для C++, для Си(99) это stdint.h.
0
odip
Эксперт С++
7162 / 3221 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
30.08.2009, 23:28 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 и вообще не является никаким стандартом.
0
_mayor
1 / 1 / 1
Регистрация: 29.08.2009
Сообщений: 63
31.08.2009, 16:47  [ТС] 16
typedef unsigned long long int uint64_t;

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

uint64_t в отличие от ms specific __int64 не является встроенным типом, а переопределяется в хидерах
0
31.08.2009, 16:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2009, 16:47

[C++ Error] Unit1.cpp(50): E2316 '_fastcall TForm1::Vector(int,int,int,int)' is not a member of 'TForm1'
есть событие набраное в Unit.cpp, при запуске программы выбивается ошибка: ...

Если результат деления int на int есть тип float
Есть две ситуации: int a = 10; int b = 3; c = a/b; // через несколько...

Too few parameters in call to '_fastcall TStringGrid::GetCells(int,int)
Текст процедуры: bool TForm1::MatrixFilled(TStringGrid *grid, int rows, int...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

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