Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2015, 10:28   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну unsigned long часто равен unsigned int, попробуйте unsigned long long.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.10.2015, 10:37   #12
Andrej_K
Форумчанин
 
Регистрация: 27.07.2013
Сообщений: 256
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А какова задача? Тебе наверное нужно работать с длинной арифметикой?
Задача сделать бесконечный цикл и посмотреть, что будет. Я посмотрел и теперь хочу понять почему так происходит. Примерно понимаю, что это физическое ограничение (точнее конструктивное) в памяти, но почему цикл далее выдаёт бесконечно одни нули?

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
ну unsigned long часто равен unsigned int, попробуйте unsigned long long.
Пробовал, тот же результат.

Последний раз редактировалось Stilet; 30.10.2015 в 10:59.
Andrej_K вне форума Ответить с цитированием
Старый 30.10.2015, 10:59   #13
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от Andrej_K Посмотреть сообщение
Пробовал, тот же результат.
А вы printf поменяли ?
waleri вне форума Ответить с цитированием
Старый 30.10.2015, 11:13   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
но почему цикл далее выдаёт бесконечно одни нули?
потому что произошло ПЕРЕПОЛНЕНИЕ разрядной сетки (numeric overflow)
вот и всё.

ну представьте, например, что вы к велосипедной камере прикрепили манометр и мощный компрессор и накачиваете её. Манометр показывает возрастание давления, вы его записываете по шкале времени, потом бац - манометр начинает показывать нули, компрессор работает, а результат - ноль.
"Что случилось, почему так" - спрашиваете Вы. А просто камера ПЕРЕПОЛНИЛАСЬ (взорвалась), сколько её уже на накачивай - всё равно будет ноль.
Аллегория понятна?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.10.2015, 13:27   #15
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Примерно понимаю, что это физическое ограничение (точнее конструктивное) в памяти, но почему цикл далее выдаёт бесконечно одни нули?
потому что физическое ограничение это есть ОСТАТОК от деления на
2**8 (для byte i )
2**16 (word i )
2**32 (int i )
2**64 (longint i )
вы начинаете с 1 =2**0
умножаете на ДВОЙКУ(т.е. получаете 2**x)
и в конце концов получаете 2**32
после приведения по модулю (то самое физическое ограничение) и получается 0.
а ноль при умножении на любое число всегда даст 0.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 30.10.2015 в 13:29.
evg_m на форуме Ответить с цитированием
Старый 30.10.2015, 13:55   #16
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

посмотрите бинарный вид любого числа.
зачем темы создавать? просмотр памяти и вперед.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.10.2015, 14:11   #17
Andrej_K
Форумчанин
 
Регистрация: 27.07.2013
Сообщений: 256
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А вы printf поменяли ?
Нет. На что поменять. Сейчас там printf ("%u", i);
Andrej_K вне форума Ответить с цитированием
Старый 30.10.2015, 14:34   #18
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:
Сообщение от Andrej_K Посмотреть сообщение
Нет. На что поменять. Сейчас там printf ("%u", i);
printf ("%llu\n", i);

книжку почитай уже.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 30.10.2015, 15:01   #19
Andrej_K
Форумчанин
 
Регистрация: 27.07.2013
Сообщений: 256
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
printf ("%llu\n", i);

книжку почитай уже.
Я читаю и выполняю все задания, а про это ещё не было. Это моё личное отступление — хочу знать сейчас. Так что нехрен меня учить учиться.
Andrej_K вне форума Ответить с цитированием
Старый 30.10.2015, 15:11   #20
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от Andrej_K Посмотреть сообщение
а про это ещё не было.
Как же, а когда меняли тип со знакового на беззнаковый?
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что происходит в коде? Kirill3211 C# (си шарп) 5 12.12.2014 16:22
Что происходит с Вконтактом? Анна-22 Безопасность, Шифрование 44 06.05.2013 10:12
Коварный С++. Что происходит?! Начавший Общие вопросы C/C++ 3 07.12.2012 14:36
Происходит ли перераспределение памяти при присваивании динамических массивов одинаковых размеров? chertovich Общие вопросы Delphi 2 06.10.2012 13:02
Что происходит с сайтами? Smitt&Wesson Свободное общение 14 14.03.2012 11:11