Narrowing
The limited dynamic range of small integers can be used to simplify some expressions, even if the value of the small integer is not known.
Example:
Each of the expressions in the code fragments below can be replaced with the value zero (on systems that define short to have 16 bits).
unsigned short int s; (s >> 20) /* all bits of precision have been shifted out, thus 0 */ (s > 0x10000) /* 16 bit value can't be greater than 17 bit, thus 0 */ (s == -1) /* can't be negative, thus 0 */
Notes:
This type of expression may indicate an error in the program, and some compilers emit warnings for some of these expressions (e.g. unsigned short compared to a negative constant).
Programmers generally don't write these expressions directly. However, these expressions can occur after macro expansion, or after other optimizations.