Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Wiki Markup
The result of {{E1 << E2}} is {{E1}} left-shifted {{E2}} bit positions; vacated bits are filled with zeros. If {{E1}} has an unsigned type, the value of the result is {{E1 * 2 ^E2^}}, reduced modulo one more than the maximum value representable in the result type.  As a result, left shift operations can result in an integer overflow condition (see \[[INT32-C|INT32-C. Ensure that integer operations do not result in an overflow]\]). If {{E1}} has a signed type and nonnegative value, and {{E1 * 2 ^E2^}} is representable in the result type, then that is the resulting value; otherwise, the behavior is undefined.

...

Code Block
bgColor#ccccff
unsigned int si1, si2, result;

if ( (si2 < 0) || (si2 < 0) || (si2 >= sizeof(int)*CHAR_BIT) || (si1 > (INT_MAX / si2)) ) {
  /* handle error condition */
}
result = si1 << si2;

...