Why am I getting :
(373)implicit signed to unsigned conversion
by doing:
fan_on_hh = hh + fan_hh_increment
All fan_on_hh
, hh
and fan_hh_increment
are unsigned char
.
This post suggests to do this:
fan_on_hh = (unsigned char) hh + fan_hh_increment
But I keep getting the same warning by doing that.
Is there a way to stop these warnings?
Integer types smaller than int
(e.g. unsigned char
) are promoted to int
when an operation is performed on them. If all values of the original type can be represented as an int
, the value of the smaller type is converted to an int
.
So in your example
hh
and fan_hh_increment
are promoted to int
before the addition.
When you want to stop the warning, you had to cast the result to unsigned char
:
fan_on_hh = (unsigned char) (hh + fan_hh_increment);