We often refer to things as widening or narrowing conversions. A widening conversion is a conversion that is "safe" - there can be no loss of data in a widening conversion. A narrowing conversion, however, is not safe. You can lose data in a narrowing conversion.
To consider something a widening conversion, it must pass one
test - all values representable by the first data type must be representable by the second. If that is possible, it is considered a widening conversion.
Based on that, it's easier to see that a conversion is considered a widening or narrowing conversion based on the
ranges of the data types, not the number of bytes those data types contain. If the range of the original data type is a subset of the range of the conversion data type, the conversion is considered to be widening. If not, the conversion is a narrowing conversion.
As every value representable by a long is also representable by a float, converting a long to a float is a widening conversion. As every float, however, is not representable by a long, converting from a float to a long is considered a narrowing conversion.
I hope that helps,
Corey