Безопасное, но не безопасное приведение int в float
Приведение int
к float
проходит неявно, а раз неявно значит безопасно, но так говорится в книгах и различных видео.
Заминка у меня случилась когда выполнил это:
float a = int.MaxValue; // 2_147_483_647
Console.WriteLine(a); // Вывод: 2,1474836E+09
Решил в цикле перебрать и оказалось что со значения 16777217 приведение не безопасно.
int a = 16777217;
float b = a;
Console.WriteLine(b); // Вывод 16777216
Понимаю например почему byte в short, int, long совершено безопасно проходит:
byte a = 255; // 1111 1111
short b = a; // 0000 0000 1111 1111
int c = a; // 0000 0000 0000 0000 0000 0000 1111 1111
long d = a; // 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 1111
Почему int
во float
не требует явного приведения ?
Источник: Stack Overflow на русском