Странный код C++
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Странный код C++ - 2010-06-07 22:38:42.280000
|
|
|
ecspertiza
Сообщений: 21
Оценки: 0
Присоединился: 2009-02-09 10:41:43.410000
|
есть два кода #include <iostream> #include <fstream> #include <limits.h> int main(int argv, const char** argc) { std::cout << typeid(ULLONG_MAX).name() << std::endl; unsigned __int64 max(1024*1024*1024*8); std::cout << typeid(max).name() << " " << typeid(ULLONG_MAX).name() << " " << max << " " << ULLONG_MAX; return 0; } в этом случае max будет равен 0 #include <iostream> #include <fstream> #include <limits.h> int main(int argv, const char** argc) { std::cout << typeid(ULLONG_MAX).name() << std::endl; unsigned __int64 max; max = 1024; max *= 1024; max *= 1024; max *= 8; std::cout << typeid(max).name() << " " << typeid(ULLONG_MAX).name() << " " << max << " " << ULLONG_MAX; return 0; } а в этом как положено, почему так? я себе всю голову сломал8|
|
|
|
RE: Странный код C++ - 2010-06-08 00:07:11.513333
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: ecspertiza unsigned __int64 max(1024ULL * 1024 * 1024 * 8); quote:
ORIGINAL: ecspertiza а в этом как положено, почему так? я себе всю голову сломал8| любое значение должно иметь тип, даже временное. временная переменная, хранящая значение 1024 * 1024 * 1024 * 8 по умолчанию у тебя получает тип signed long - отсюда и переполнение. то, что после вычисления значение записывается в unsigned long long, уже не важно - переполнение уже произошло, и данные уже были потеряны
|
|
|
RE: Странный код C++ - 2010-06-08 17:05:52.786666
|
|
|
ecspertiza
Сообщений: 21
Оценки: 0
Присоединился: 2009-02-09 10:41:43.410000
|
Спасибо, теперь понятно :)
|
|
|
|
|