попробовать:
volatile float bob = -344.0f;
unsigned int fred = (unsigned int)bob;
printf("%d\n",fred);
вывод будет 0.
очевидно, я ожидаю, что это повторится так же, как если бы я бросил от интервала со знаком до неподписанного интервала (который действительно переносится и действует как ожидалось на iPhone),
мы предполагаем, что это - что-то, чтобы сделать с настройками с плавающей точкой.
какие-либо идеи?
Этого следовало ожидать - приведение отрицательного float к unsigned int приводит к неопределенному поведению (UB). Если вы хотите, чтобы значение обернулось (что также является UB, BTW), то вам нужно сначала привести к (signed) int, а затем к unsigned int. В идеале вы вообще не должны полагаться на UB и должны найти лучший способ сделать то, что вам нужно.
§6.3.1.4 стандарта C:
Когда конечное значение реального плавающего типа преобразуется в целочисленный тип , отличный от _Bool, дробная часть {{1} } отбрасывается (т. е. значение усекается до нуля). Если значение составной части не может быть представлено целочисленным типом, поведение не определено.
Как сказал Пол Р , это неопределенное поведение.