View Full Version : __int64 question
Vozmojno li ne peregrujaya "<<" delat' 'cout' peremennuyu kotoraya imeet tip __int64
main()
{
__int64 a;
cout << a;
}
a chto ne kompilitsya? u menya pod vcpp 7.1 idet.
#include <iostream>
int main()
{
__int64 a=0x7fffffffffffffff;
std::cout << a;
system("pause");
}
Agregat
Oct 31, 2004, 06:15
Vozmojno li ne peregrujaya "<<" delat' 'cout' peremennuyu kotoraya imeet tip __int64
main()
{
__int64 a;
cout << a;
}
1. у main обязательно должен быть возвращаемый тип и он int. Другого по стандарту не дано.
2. Не видно, откуда include - нут cout. Из iostream - a? тогда где std:: или using std::cout?
3. не видно, что за компилятор. я должен из воздуха высасывать эти данные?
4. Учись задавать вопросы. Предлагаю попробовать на EFnet серверах канал #C++ тебя быстро научат всему, что надо (если конечно не забанят за 5 минут).
1. у main обязательно должен быть возвращаемый тип и он int. Другого по стандарту не дано.
soglasis', chto suti dela eto ne menyaet
3. не видно, что за компилятор. я должен из воздуха высасывать эти данные?
Tot, kotiriy postavlyaetsya s Visual Studio 6.
4. Учись задавать вопросы. Предлагаю попробовать на EFnet серверах канал #C++ тебя быстро научат всему, что надо (если конечно не забанят за 5 минут).
a oni tam vse takie AGResivnie ? :devil: :)
#include <iostream.h>
int main()
{
__int64 a = 0xfff;
cout << a;
return 0;
}
Agregat
Nov 1, 2004, 13:26
1. меняет
2. уже ближе к сути дела
3. напиши, как Давид, если не выйдет снова поговорим.
1. меняет
2. уже ближе к сути дела
3. напиши, как Давид, если не выйдет снова поговорим.
napisal, ne vishlo.
Agregat
Nov 1, 2004, 13:37
значти не судьба. __инт64 не поддерживается потоками в 6 ВС. Видишь, как все просто. Я могу сказать, что 8 компилирует.
Попробуй поставить последний Мокрософт СДК, у него есть компилятор для 64 бит
Хотя если у тебя нет 64 битного виндовса, то и СДК тебе незачем:)
можешь сделать cout по часттям, типа
int i = int_64_variable >> 32;
cout << i;
i = int_64_variable;
cout << i <<endl;
Agregat
Nov 1, 2004, 14:16
Хотя если у тебя нет 64 битного виндовса, то и СДК тебе незачем:)
можешь сделать cout по часттям, типа
int i = int_64_variable >> 32;
cout << i;
i = int_64_variable;
cout << i <<endl;
позор.
semuliroval taki:))
std::ostream& operator<<(std::ostream &out, __int64 num)
{
static const char *pdigits="0123456789";
std::string str;
if(num<0)
{
out << '-';
num=-num;
}
do
str+=pdigits[num%10];
while(num/=10);
std::copy(str.rbegin(), str.rend(), std::ostream_iterator<char>(out, ""));
return out;
}
Agregat
Nov 1, 2004, 15:01
дав,
std::copy(str.rbegin(), str.rend(), std::ostream_iterator<char>(os, ""));
кроме того я бы советовал ресайзать строчку в начале символов этак на 15, чтоб времени на реаллок не терять вообще.
да, забыл сказать - работает только в том случае, если делать output в hex...
типа
__int64 int_64_variable = 1234567898765;
int i = int_64_variable >> 32;
printf("%x", i);
i = int_64_variable;
printf("%x\n", i);
Agregat
Nov 1, 2004, 15:08
да, забыл сказать - работает только в том случае, если делать output в hex...
типа
__int64 int_64_variable = 1234567898765;
int i = int_64_variable >> 32;
printf("%d", i);
i = int_64_variable;
printf("%d\n", i);Ну это вооще позор.
1. не cout
2. печаешь не hex, а десятично... то есть ес кодн ел хеч :)
Ну вот, Давид написал умную вещь
Agregat
Nov 1, 2004, 15:21
Ну вот, Давид написал умную вещьНу да.
Правда то что он написал очень красиво оптимизируется
1. если число попадает в range int - а, тогда сразу каст на инт и цоут
2. если число вне range - а инта, тогда используем его алгоритм
пока не попадаем в range инта, a потом цоут.
Hans Andersen
Nov 2, 2004, 12:34
vc6-um sa bug a, vorpes workaround kareli a ogtagorzel (see kb):
std::ostream& operator<<(std::ostream& os, __int64 i)
{
char buf[20];
sprintf(buf,"%I64d", i );
os << buf;
return os;
}
Q168440
gl
vBulletin® v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.