No, this is not a bug. You are using a compile time constant expression which is signed int
unless told otherwise. Therefore you can only represent numbers between -32768 and 32767. Your computation of 255 * 255 = 65025
exceeds the range. Thus you see a wrap aroundan overflow. In the C/C++ standard the overflow of signed types is actually undefined behavior. That means that the compiler is allowed to do anything from showing the correct answer to halt and catch fire. Only unsigned types with a known size like uint16_t
have a well-deineddefined overflow behaviour. You should promote your right hand side computation to unsigned type like this:
z = 255U * 255U;
This way you tell the compiler your intention and don't land in "Undefined-Behaviour-Land".