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.