Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

...

Code Block
bgColor#FFCCCC
// b[] is a byte array, initialized to 0xff
byte[] b = new byte[] {-1, -1, -1, -1};
int result = 0;
for (int i = 0; i < 4; i++) {
  result = ((result << 8) + b[i]);
}

Wiki MarkupIn the bitwise operation, the value of the byte array element {{b\[i\]}} is promoted to an {{int}} by sign-extension. When a byte array element contains a negative value (for example, {{0xff}}), the sign-extension propagates 1-bits into the upper 24 bits of the {{int}}. This behavior might be unexpected if the programmer is assuming that {{byte}} is an unsigned type. In this example, adding the promoted byte values to {{result}} fails to result in a packed integer representation of the bytes \ [[FindBugs 2008|AA. References#FindBugs 08]\].

Noncompliant Code Example

...

Bibliography

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="b2639208-ea67-462c-ba4f-6c9fa1468fc7"><ac:plain-text-body><![CDATA[

[ [Steele 1977AA. References#Steele 1977] ] ]]></ac:plain-text-body></ac:structured-macro>

...

      03. Numeric Types and Operations (NUM)      NUM02-J. Ensure that division and modulo operations do not result in divide-by-zero errors