Всем привет. Не могу понять в чем проблема. Имею следующую строку кода: veight = (adc_send * veight_etal) ; veight - 64бит adc_send - 32бит veight_etal - 32бит константа = 1000 когда adc_send приближается к значению 4509930 то происходит переполнение и в переменной veight я получаю 107 в место 4509930000 почему так происходит? ведь переменная результата 64 бит а если сделать adc_send - 64бит то все работает как нужно
_________________ Одержать сто побед в ста битвах — это не вершина воинского искусства. Повергнуть врага без сражения — вот вершина.
так что получается, что умножение происходит в переменную adc_send ? а потом только в veight ?
Добавлено after 1 minute 25 seconds: uint64_t veight = ((uint64_t)adc_send * veight_etal); так легче уже саму переменную сделать 64 бит и все. или в вашем примере мы потом не будем занимать память?
_________________ Одержать сто побед в ста битвах — это не вершина воинского искусства. Повергнуть врага без сражения — вот вершина.
Зависит от компилятора. Должно занимать немного больше памяти только во время выполнения операции. А некоторые компиляторы достаточно "умны" и это не имеет значения - будет оптимизация и будет такой же объем памяти.
Я же написал: u32*u32=u32 Но u32*u64=u64, поэтому достаточно привести хоть один аргумент к 64 битам чтобы результат туда влезал. Аналогично int*int=int, int/int=int, но при этом int*float=float и int/float=float. Именно поэтому 1/2=0, но 1.0/2=0.5
ага. предсказанное будущее начинается. расскажу на микрочипе, пусть поржут =============== ... имхо, те, которые топовые- скоро на "андуриновую" структуру перейдут... а, фигли, вот вам - "outUSB2.0(byte)"... и не думайте.... там всё уже работает.... но, ножки трогать- низя.....
наверное- это хорошо.... скорость разработки увеличивается... но... с другой- "болты" закручивают- в плане творчества.... ..... К сожалению, по причине ограниченной продолжительности жизни, придётся решать, что приоритетнее. На ногодрыге ВСЁ сделать нельзя (не хватит времени на решение задачи). Надо отдавать что-то на откуп другим людям - или разработчикам кремния (хардварный USB тот-же), или (далее) авторам компиляторов, или (далее) каким-то осям и бибилиотекам ( и т.д.). Большинство уже сделало выбор в пользу "сейчас любой ценой". Все стареют ведь. А надо успеть. Жду не дождусь, когда ардуинские "скетчи" начнут применять в ответственных приложениях. Закупился попкорном в ожидании какого-нибудь мирового коллапса, устроенного программистами (типа, перестали работать все банковские карточки мира на три дня или что-то в этом духе).Только после глабального 3.14здеца может поменяться вектор коллективного восприятия действительности (и то - не факт, к сожалению)
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения