 
                            | Wiki Markup | 
|---|
| Programmers frequently make errors regarding the precedence guidelines of operators due to the unintuitive low-precedence levels of {{&}}, {{\|}}, {{\^}}, {{<<}}, and {{>>}}. Avoid Mistakesmistakes regarding precedence guidelines can be avoided by through the suitable use of parentheses.; Defensivethis usealso ofimproves parentheses,code ifreadability notunless taken to excess, also improves code readability. The precedence of operations by the order of the subclauses are defined in the Java Tutorials \[[Tutorials 2008|AA. Bibliography#Tutorials 08]\]. | 
The Although the guideline EXP09-J. Do not depend on operator precedence while using expressions containing side-effects advises against depending on parentheses for specifying the evaluation order; however this advice is applicable , it applies only to expressions that contain side-effects.
...
The intent of the expression in this noncompliant code example is to add the variable OFFSET with to the result of the bitwise AND between x and MASK.
...
| Code Block | 
|---|
| x & (1337 - 1337) | 
Compliant Solution
In this This compliant solution , uses parentheses are used to ensure that the expression evaluates as expectedintended.
| Code Block | ||
|---|---|---|
| 
 | ||
| 
public static final int MASK = 1337;
public static final int OFFSET = -1337;
public static int computeCode(int x) {
  return (x & MASK) + OFFSET;
}
 | 
Exceptions
EXP00-EX1: Mathematical Parentheses may be omitted from mathematical expressions that follow algebraic order do not require parentheses. For instance, consider the expression:
...
By mathematical convention, multiplication is performed before addition. Consequently, parentheses may prove to be ; parentheses are redundant in this case.
| Code Block | ||
|---|---|---|
| 
 | ||
| x + (y * z) | 
...
| Guideline | Severity | Likelihood | Remediation Cost | Priority | Level | 
|---|---|---|---|---|---|
| EXP06-J | low | probable | medium | P4 | L3 | 
Automated Detection
Detection of all expressions using low-precedence operators without parentheses is straightforward. Determining the correctness of such uses is infeasible in the general case; heuristic warnings may be useful.
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this guideline on the CERT website.
...
This guideline appears in the C++ Secure Coding Standard as EXP00-CPP. Use parentheses for precedence of operation.
Bibliography
| Wiki Markup | 
|---|
| \[[ESA 2005|AA. Bibliography#ESA 05]\] Rule 65: Use parentheses to explicitly indicate the order of execution of numerical operators \[[Tutorials 2008|AA. Bibliography#Tutorials 08]\] [Expressions, Statements, and Blocks|http://java.sun.com/docs/books/tutorial/java/nutsandbolts/expressions.html], [Operators|http://java.sun.com/docs/books/tutorial/java/nutsandbolts/operators.html] \[[ESA 2005|AA. Bibliography#ESA 05]\] Rule 65: Use parentheses to explicitly indicate the order of execution of numerical operators | 
...
EXP05-J. Be aware of integer promotions in binary operators 04. Expressions (EXP) EXP07-J. Be aware of the short-circuit behavior of the conditional AND and OR operators