Что делает приведение типов, так это преобразовывает значение одного типа в значение другого типа. То, что представление этого значения для каждого данного типа зависит от типа.
Предположим, GetSignal
возвращает перечисление с базовым значением 1. В качестве 32-разрядного целого числа его представление выглядит следующим образом (при условии байтового порядка байтов с прямым порядком байтов, то есть от высокого к низкому):
00000000 00000000 00000000 00000001
Это целочисленное значение 1 затем преобразуется через явное приведение к f32_t
. Предполагая, что этот тип представлен как значение с плавающей точкой одинарной точности IEEE 754, его представление (от высокого к низкому) выглядит следующим образом:
00111111 10000000 00000000 00000000
И это представление сохраняется в iValue
.
Затем iValue
преобразуется в i32_t
. Таким образом, значение float
1 с приведенным выше представлением IEEE754 с плавающей запятой преобразуется в значение int
1 с этим представлением:
00000000 00000000 00000000 00000001
То же, что и возвращенное GetSignal
. Это значение затем приводится к типу uint8
, который имеет это представление:
00000001
И это представление сохраняется в outValue
.
Что касается вашего комментария о добавлении float
и правила int
, обычная арифметика c преобразование предписывают, что значение с типом int
сначала неявно преобразуется в тип float
, затем можно добавить два значения float
и результат имеет тип float
.