 
                            ...
This compliant solution tests the suspect shift operations to guarantee there is no possibility of undefined behavior.
| Code Block | ||
|---|---|---|
| 
 | ||
| int si1, si2, sresult; unsigned int ui1, ui2, result; if ( (si2 < 0) || (si2 >= sizeof(int)*CHAR_BIT) ) { /* handle error condition */ } else { sresult = si1 >> si2; } if (ui2 >= sizeof(unsigned int)*CHAR_BIT) { /* handle error condition */ } else { uresult = ui1 >> ui2; } | 
...