-
- Ну почему, вместо того чтобы писать такое вранье, люди не могут осилить несколько абзацев из стандарта про integer promotion rules, прямые ссылки на которые неоднократно тут давал SciFi. - il-2(17.01.2020 12:10)
- Почему же враньё? Я так понимаю: "int8_t a, b; int16_t c = (int16_t)a * b;" вполне себе нормально работает. Если компилятор не подставил туда инструкцию типа 8x8=16 - это дурной компилятор, язык Си тут ни при чём. - SciFi(17.01.2020 12:43)
- "результат выражения не бывает длиннее самого длинного из операндов". Твой пример можно написать и без приведения к int16_t: il-2(40 знак., 17.01.2020 12:50)
- Можно. Тогда у произведения в старшем байте будет ноль (или 0xFF - размноженный бит знака). Но зачем? - SciFi(17.01.2020 13:10 - 13:20)
- Семен Семеныч!!! От тебя я даже не ожидал такой прорухи :-) Проверь!!! - il-2(17.01.2020 13:51)
- А, ну да, int же. - SciFi(17.01.2020 13:52)
- Семен Семеныч!!! От тебя я даже не ожидал такой прорухи :-) Проверь!!! - il-2(17.01.2020 13:51)
- Можно. Тогда у произведения в старшем байте будет ноль (или 0xFF - размноженный бит знака). Но зачем? - SciFi(17.01.2020 13:10 - 13:20)
- "результат выражения не бывает длиннее самого длинного из операндов". Твой пример можно написать и без приведения к int16_t: il-2(40 знак., 17.01.2020 12:50)
- Почему же враньё? Я так понимаю: "int8_t a, b; int16_t c = (int16_t)a * b;" вполне себе нормально работает. Если компилятор не подставил туда инструкцию типа 8x8=16 - это дурной компилятор, язык Си тут ни при чём. - SciFi(17.01.2020 12:43)
- Строго говоря, в C++ это верно только для встроенных типов, определённый пользователем operator* не обязан возвращать тот же тип, что его операнды. - йцукен(15.01.2020 19:18)
- Ну почему, вместо того чтобы писать такое вранье, люди не могут осилить несколько абзацев из стандарта про integer promotion rules, прямые ссылки на которые неоднократно тут давал SciFi. - il-2(17.01.2020 12:10)