На языке C 0xfe
- это шестнадцатеричный int
литерал.В частности, оно равно 254
, поэтому результатом является значение двойной точности ceil(x) + 254.0
.
Если вы явно преобразуете в int8_t
или другой 8-битный тип со знакомПримерно так:
(int8_t)0xfe
тогда вы можете получить значение -2, но это не гарантируется стандартом.Это связано с тем, что 0xfe
имеет значение 254, которое не может быть представлено в 8-битном поле со знаком, поэтому применяется последнее правило в разделе 6.3.1.3 стандарта:
В противном случае новыйтип подписан и значение не может быть представлено в нем;либо результат определяется реализацией, либо генерируется определяемый реализацией сигнал.
Если вам нужно значение -2
, напишите -2
.