URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4062
[ Назад ]

Исходное сообщение
"Проблема long long"

Отправлено drone , 13-Мрт-05 19:49 
Значит, ситуевина такая. Вот код:

long long test;
test= 5368709120;

При компиляции пишет:
error: integer constant is too large for "long" type

Но позвольте: тип "long long" - 64 бита(!)
При этом код:

long long test;
test= 1073741824;
test*= 5;
printf("%lld\n", test);

Работает (!!)

В чем прикол?
Заранее спасибо.


Содержание

Сообщения в этом обсуждении
"Проблема long long"
Отправлено ААА , 13-Мрт-05 20:16 
>Значит, ситуевина такая. Вот код:
>
>long long test;
>test= 5368709120;
>
>При компиляции пишет:
>error: integer constant is too large for "long" type
>
>Но позвольте: тип "long long" - 64 бита(!)
>При этом код:
>
>long long test;
>test= 1073741824;
>test*= 5;
>printf("%lld\n", test);
>
>Работает (!!)
>
>В чем прикол?
>Заранее спасибо.
Пиши в багфиксы


"Проблема long long"
Отправлено Асен Тотин , 13-Мрт-05 23:41 
Привет,

Я не большой специалист по С, но по дефолту, кажется, все переменный - signed... т.е. у вас диапазон от -2^63 до +2^63 (приблизительно :). Ваше число не выходит ли за этот предел? И если указать unsigned, не помогает?

WWell,


"Проблема long long"
Отправлено sev , 14-Мрт-05 09:49 
>>Значит, ситуевина такая. Вот код:
>>
>>long long test;
>>test= 5368709120;
>>
>>При компиляции пишет:
>>error: integer constant is too large for "long" type
>>
>>Но позвольте: тип "long long" - 64 бита(!)
>>При этом код:
>>
>>long long test;
>>test= 1073741824;
>>test*= 5;
>>printf("%lld\n", test);
>>
>>Работает (!!)
>>
>>В чем прикол?
>>Заранее спасибо.
>Пиши в багфиксы

Проблема не в типе переменной test, а в типе константы.
Надо писать: test= 5368709120ull;



"Проблема long long"
Отправлено drone , 14-Мрт-05 10:45 
Спасибо, уже разобрался:

long long test= 107374182400LL