In the following C++ code the values of ‘z’ and ‘n’ are undefined, because they are the result of an operation with signed integer arithmetic overflow (‘x’ and ‘y’ are first implicitly converted to signed int). The value of ‘w’ is implementation defined, because it is the result of a conversion:
#include <iostream> #include <bitset> int main(int argc, char *argv[]) { unsigned short x = 65535, y = x; unsigned short z = x * y; unsigned int n = x * y; std::cerr << "z = " << std::bitset<16>(z) << ", n = " << std::bitset<32>(n) << ", sizeof(int) = " << sizeof(int) << std::endl; short w = 0x80000000; return 0; }
see Numeric conversions section of Implicit conversions article.