Интересное предупреждение компилятора при сравнении беззнаковых чисел
- Войдите на сайт для отправки комментариев
Пнд, 27/09/2021 - 08:35
Есть такая конструкция:
if (a>=0 and a< 170)...
Так вот, если "a" беззнаковое компилятор предупреждает, что выражение a>=0 лишнее и это логично,
а вот как это реализовано будет в машинном коде, если переменная уменьшается и должна перейти в область ниже нуля, что-то мне предсказывает, что можно на что-то напороться...
Какие тут подводные камни?
Математика в С зацикленная.
(u8)0 - 1 == 255
Так вот, если "a" беззнаковое компилятор предупреждает, что выражение a>=0 лишнее и это логично,
а вот как это реализовано будет в машинном коде...
В машинном коде этого быть не должно. т.е. компилятор предупредил, а оптимизатор - выкинул.
Математика в С зацикленная.
(u8)0 - 1 == 255
Это не так. Это просто оставлено на откуп реализации.
Какие тут подводные камни?
Как минимум - непереносимость. Здесь у нас даже тем была как раз про беззнаковые, где b707 компилировал для ПК и получалось не то, что компилируется в среде Arduino.
Какие тут подводные камни?
Как минимум - непереносимость. Здесь у нас даже тем была как раз про беззнаковые, где b707 компилировал для ПК и получалось не то, что компилируется в среде Arduino.
а вот интересно, есть переменная которая в библиотеках идёт как беззнаковая, для условий переводить в знаковую или как? (для переносимости)
Выйдите и зайдите как положено.)))
а вот интересно, есть переменная которая в библиотеках идёт как беззнаковая, для условий переводить в знаковую или как? (для переносимости)
Как Вам удобнее. Но в условии должна сравниваться переменные одного типа (одной знаковости).