 
                            ...
This noncompliant code example can result in an error condition on implementations in which an arithmetic shift is performed, and the sign bit is propagated as the number is shifted [Dowd 2006].:
| Code Block | ||||
|---|---|---|---|---|
| 
 | ||||
| int rc = 0;
int stringify = 0x80000000;
char buf[sizeof("256")];
rc = snprintf(buf, sizeof(buf), "%u", stringify >> 24);
if (rc == -1 || rc >= sizeof(buf)) {
  /* handle error */
}
 | 
...
In this compliant solution, stringify is declared as an unsigned integer. The value of the result of the right-shift operation is the integral part of the quotient of stringify / 2^24.2 ^ 24:
| Code Block | ||||
|---|---|---|---|---|
| 
 | ||||
| int rc = 0;
unsigned int stringify = 0x80000000;
char buf[sizeof("256")];
rc = snprintf(buf, sizeof(buf), "%u", stringify >> 24);
if (rc == -1 || rc >= sizeof(buf)) {
  /* handle error */
}
 | 
...
| Tool | Version | Checker | Description | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Compass/ROSE | 
 | 
 | Can detect violations of this rule. In particular, it flags bitwise operations that involved variables not declared with  | ||||||
| 
 | optrargs | Fully implemented. | |||||||
| Fortify SCA | 5.0 | 
 | Can detect violations of this recommendation with the CERT C Rule Pack. | ||||||
| 
 | 50 S | Fully implemented. | |||||||
| PRQA QA-C | 
 | 0502 | Fully implemented. | ||||||
| Splint | 
 | 
 | 
 | 
...