Интересное предупреждение компилятора при сравнении беззнаковых чисел

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Есть такая конструкция:
 

if (a>=0 and a< 170)...

Так вот, если "a" беззнаковое компилятор предупреждает, что выражение a>=0 лишнее и это логично,
а вот как это реализовано будет в машинном коде, если переменная уменьшается и должна перейти в область ниже нуля, что-то мне предсказывает, что можно на что-то напороться...
Какие тут подводные камни?

rkit
Онлайн
Зарегистрирован: 23.11.2016

Математика в С зацикленная.

(u8)0 - 1 == 255

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ua6em пишет:

Так вот, если "a" беззнаковое компилятор предупреждает, что выражение a>=0 лишнее и это логично,

а вот как это реализовано будет в машинном коде...

В машинном коде этого быть не должно. т.е. компилятор предупредил, а оптимизатор - выкинул.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

rkit пишет:

Математика в С зацикленная.

(u8)0 - 1 == 255

Это не так. Это просто оставлено на откуп реализации.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:

Какие тут подводные камни?

Как минимум - непереносимость. Здесь у нас даже тем была как раз про беззнаковые, где b707 компилировал для ПК и получалось не то, что компилируется в среде Arduino.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

ua6em пишет:

Какие тут подводные камни?

Как минимум - непереносимость. Здесь у нас даже тем была как раз про беззнаковые, где b707 компилировал для ПК и получалось не то, что компилируется в среде Arduino.

а вот интересно, есть переменная которая в библиотеках идёт как беззнаковая, для условий переводить в знаковую или как? (для переносимости)

Green
Offline
Зарегистрирован: 01.10.2015

Выйдите и зайдите как положено.)))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:

а вот интересно, есть переменная которая в библиотеках идёт как беззнаковая, для условий переводить в знаковую или как? (для переносимости)

Как Вам удобнее. Но в условии должна сравниваться переменные одного типа (одной знаковости).