Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

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

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

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

strict c++ : 64 bit int

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

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

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

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

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

Ошибка: invalid types ‘int[int]’ for array subscript - C++
Всем доброго дня, после компиляции выводится ошибка, которая меня вводит в ступор. #include "blitz.h" double dummy11 = 0.0; Array...

как проинициализировать std::stack<const int> obj ( std::stack<int>{} ); - C++
добрый день. вопрос в коде: http://rextester.com/VCVVML6656 #include &lt;iostream&gt; #include &lt;stack&gt; //-std=c++14...

void _fastcall TForm1::Vector(int x0, int y0, int a, int l); - C++ Builder
//--------------------------------------------------------------------------- #include &quot;DateUtils.hpp&quot; // для доступа к SecondOf,...

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

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

зы этого компилятора пока под рукой нету, что нить инклудить для __int64 нужно?
0
M128K145
Эксперт С++
8297 / 3517 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
30.08.2009, 20:03 #11
в 8, 9 и 10 поддерживается. А вот в 6.0, Dev-C++ и Borland C++ 3.1 такого нету. Подключать ничего не надо
0
Gravity
564 / 558 / 39
Регистрация: 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
Эксперт С++
7159 / 3221 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
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
564 / 558 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
30.08.2009, 23:07 #14
У меня GCC 4.4.1. Наверно недавно ввели для C++, для Си(99) это stdint.h.
0
odip
Эксперт С++
7159 / 3221 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
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
30.08.2009, 23:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2009, 23:28
Привет! Вот еще темы с ответами:

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

Too few parameters in call to '_fastcall TStringGrid::GetCells(int,int) - C++ Builder
Текст процедуры: bool TForm1::MatrixFilled(TStringGrid *grid, int rows, int cols) { for (int i = 0; i &lt; rows; i++) for...

Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec - C++
Вот есть заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H #include &lt;iostream&gt; using...

Обясните мне, если Windows 32 bit, процессор 64 bit, то работает ли 2-ое ядро? - Windows XP
Обясните мне, если ОС Windows 32 bit, процессор 64 bit, все программы установлены разумеется 32 бит, то я так понимаю работает только одно...


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

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

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