Multiplies this by another I16, wrapping around on overflow/underflow.
I16 operator *(I16 other) => I16((value * other.value).toSigned(16));