PDA

View Full Version : __int64 question


Boyov
Oct 30, 2004, 16:18
Vozmojno li ne peregrujaya "<<" delat' 'cout' peremennuyu kotoraya imeet tip __int64


main()
{
__int64 a;
cout << a;
}

AvDav
Oct 30, 2004, 16:31
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 минут).

Boyov
Nov 1, 2004, 13:22
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. напиши, как Давид, если не выйдет снова поговорим.

Boyov
Nov 1, 2004, 13:32
1. меняет
2. уже ближе к сути дела
3. напиши, как Давид, если не выйдет снова поговорим.

napisal, ne vishlo.

Agregat
Nov 1, 2004, 13:37
значти не судьба. __инт64 не поддерживается потоками в 6 ВС. Видишь, как все просто. Я могу сказать, что 8 компилирует.

RAMZES
Nov 1, 2004, 13:54
Попробуй поставить последний Мокрософт СДК, у него есть компилятор для 64 бит

RAMZES
Nov 1, 2004, 14:04
Хотя если у тебя нет 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;
позор.

AvDav
Nov 1, 2004, 14:39
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, чтоб времени на реаллок не терять вообще.

RAMZES
Nov 1, 2004, 15:02
да, забыл сказать - работает только в том случае, если делать 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, а десятично... то есть ес кодн ел хеч :)

RAMZES
Nov 1, 2004, 15:13
Ну вот, Давид написал умную вещь

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