<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">To stay slightly on topic of the original Subject line, I'd point out that no one has yet demonstrated an example where the current precedence position of `??` causes bugs at runtime.</div><div class=""><br class=""></div><div class="">The original motivation by Erica simply failed to compile without the parentheses, so it wasn't about confusion so much as about mere convenience. And there exist actual uses where the current precedence brings greater convenience, e.g. when the RHS expression contains arithmetic operations.</div><div class=""><br class=""></div><div class="">Like Wux, I also don't think we have any reason to adjust the precedence of `??` from what it is.</div><div class=""><br class=""></div><div class="">* * *</div><div class=""><br class=""></div><div class="">But then, I also think we should do something to our bitwise ops:</div><div class=""><br class=""></div><div><blockquote type="cite" class=""><div class="">On 08 Sep 2016, at 09:58, Xiaodi Wu via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="font-family: Helvetica; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-size: 12.8px;" class="">You and I seem to agree that `</span><span style="font-size: 12.8px;" class="">let i = 4 &lt;&lt; 1 + 3` is rather reasonable.</span></div></div></blockquote><div><br class=""></div><div>Here, I would actually differ somewhat. If there's something that ought to be higher in precedence than `+` and `*`, IMO that would be actual exponentiation, which could be approximated in a math library by the presently missing `**` operator, for example.</div><br class=""><blockquote type="cite" class=""><div class=""><div style="font-family: Helvetica; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-size: 12.8px;" class="">I am not sure how one can make an unintended error either reading or writing this line of code[*].</span></div><div style="font-family: Helvetica; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-size: 12.8px;" class=""><br class=""></span></div><div style="font-family: Helvetica; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-size: 12.8px;" class="">[*] Actually, I can see precisely one way to make such an unintended error, since I have actually done so. It has to do with Swift having moved away from the classical C-family operator precedence table. I would actually not be opposed to making changes that guard against such an error.</span></div></div></blockquote></div><br class="">

There's a fair amount of C code out in the wild that is going to be migrated into Swift in the near future. And that code would benefit if Swift's precedence rules didn't unexpectedly break from C – that is, not without the programmer's awareness.<div class=""><br class=""></div><div class="">The key differences to C that I think will cause confusion in Swift are:</div><div class=""><br class=""></div><div class="">A) Unlike C, Swift defines `&lt;&lt;` and `&gt;&gt;` with the highest precedence.</div><div class="">B) Unlike C, Swift defines `&amp;` at multiplication precedence (`*` etc.).</div><div class="">C) Unlike C, Swift defines both `^` and `|` at equal precedence to each other, and that is the precedence of addition (`+` etc.).</div><div class=""><div class=""><br class=""></div><div class="">Other than that, we also use equal precedence for all comparison operators but at the same time remove their associativity, so that can't cause runtime problems (as such code would fail to compile). Here's a full table, with the notable differences marked with a red comment:</div></div><div class=""><br class=""></div><div class=""><table cellspacing="0" cellpadding="0" style="border-collapse: collapse" class="">
<tbody class="">
<tr class="">
<td valign="top" style="width: 150.0px; height: 11.0px; background-color: #bec0bf; border-style: solid; border-width: 1.0px 1.0px 1.0px 1.0px; border-color: #000000 #000000 #000000 #000000; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class=""><b class="">Infix operators in C</b></font></div>
</td>
<td valign="top" style="width: 241.0px; height: 11.0px; background-color: #bec0bf; border-style: solid; border-width: 1.0px 1.0px 1.0px 1.0px; border-color: #000000 #000000 #000000 #000000; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class=""><b class="">In Swift 3</b></font></div>
</td>
</tr>
<tr class="">
<td valign="top" style="width: 151.0px; height: 10.0px; border-style: solid; border-width: 1.0px 0.0px 0.0px 1.0px; border-color: #000000 transparent transparent #000000; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#7f7f7f" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; color: rgb(127, 127, 127); -webkit-text-stroke-color: rgb(127, 127, 127);" class="">// skipping unary ops etc</font></div>
</td>
<td valign="top" style="width: 241.0px; height: 10.0px; border-style: solid; border-width: 1.0px 1.0px 0.0px 0.0px; border-color: #000000 #000000 transparent transparent; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; font-size: 12px; line-height: normal; min-height: 14px;" class=""><br class=""></div>
</td>
</tr>
<tr class="">
<td valign="top" style="width: 151.0px; height: 11.0px; border-style: solid; border-width: 0.0px 0.0px 0.0px 1.0px; border-color: transparent transparent transparent #000000; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">*&nbsp; /&nbsp; %</font></div>
</td>
<td valign="top" style="width: 241.0px; height: 11.0px; border-style: solid; border-width: 0.0px 1.0px 0.0px 0.0px; border-color: transparent #000000 transparent transparent; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#cf232b" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; color: rgb(207, 35, 43); -webkit-text-stroke-color: rgb(207, 35, 43);" class=""><b class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;&lt;&nbsp; &gt;&gt; &nbsp; &nbsp; &nbsp; // (!)</b></font></div>
</td>
</tr>
<tr class="">
<td valign="top" style="width: 151.0px; height: 11.0px; border-style: solid; border-width: 0.0px 0.0px 0.0px 1.0px; border-color: transparent transparent transparent #000000; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">+&nbsp; -</font></div>
</td>
<td valign="top" style="width: 241.0px; height: 11.0px; border-style: solid; border-width: 0.0px 1.0px 0.0px 0.0px; border-color: transparent #000000 transparent transparent; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">&nbsp; &nbsp; &nbsp; *&nbsp; &amp;*&nbsp; /&nbsp; %&nbsp; </font><font face="Menlo" color="#cf232b" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; color: rgb(207, 35, 43); -webkit-text-stroke-color: rgb(207, 35, 43);" class=""><b class="">&amp; &nbsp; &nbsp; &nbsp;// (!)</b></font></div>
</td>
</tr>
<tr class="">
<td valign="top" style="width: 151.0px; height: 11.0px; border-style: solid; border-width: 0.0px 0.0px 0.0px 1.0px; border-color: transparent transparent transparent #000000; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">&lt;&lt;&nbsp; &gt;&gt;</font></div>
</td>
<td valign="top" style="width: 241.0px; height: 11.0px; border-style: solid; border-width: 0.0px 1.0px 0.0px 0.0px; border-color: transparent #000000 transparent transparent; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">&nbsp; &nbsp; &nbsp;+&nbsp; &amp;+&nbsp; -&nbsp; &amp;-&nbsp; </font><font face="Menlo" color="#cf232b" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; color: rgb(207, 35, 43); -webkit-text-stroke-color: rgb(207, 35, 43);" class=""><b class="">|&nbsp; ^ &nbsp; // (!)</b></font></div>
</td>
</tr>
<tr class="">
<td valign="top" style="width: 151.0px; height: 11.0px; border-style: solid; border-width: 0.0px 0.0px 0.0px 1.0px; border-color: transparent transparent transparent #000000; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">&lt;&nbsp; &lt;=&nbsp; &gt;&nbsp; &gt;=</font></div>
</td>
<td valign="top" style="width: 241.0px; height: 11.0px; border-style: solid; border-width: 0.0px 1.0px 0.0px 0.0px; border-color: transparent #000000 transparent transparent; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">...&nbsp; ..&lt;</font></div>
</td>
</tr>
<tr class="">
<td valign="top" style="width: 151.0px; height: 11.0px; border-style: solid; border-width: 0.0px 0.0px 0.0px 1.0px; border-color: transparent transparent transparent #000000; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">==&nbsp; !=</font></div>
</td>
<td valign="top" style="width: 241.0px; height: 11.0px; border-style: solid; border-width: 0.0px 1.0px 0.0px 0.0px; border-color: transparent #000000 transparent transparent; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">as&nbsp; as?&nbsp; is</font></div>
</td>
</tr>
<tr class="">
<td valign="top" style="width: 151.0px; height: 11.0px; border-style: solid; border-width: 0.0px 0.0px 0.0px 1.0px; border-color: transparent transparent transparent #000000; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">&amp;</font></div>
</td>
<td valign="top" style="width: 241.0px; height: 11.0px; border-style: solid; border-width: 0.0px 1.0px 0.0px 0.0px; border-color: transparent #000000 transparent transparent; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">??</font></div>
</td>
</tr>
<tr class="">
<td valign="top" style="width: 151.0px; height: 11.0px; border-style: solid; border-width: 0.0px 0.0px 0.0px 1.0px; border-color: transparent transparent transparent #000000; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">^</font></div>
</td>
<td valign="top" style="width: 241.0px; height: 11.0px; border-style: solid; border-width: 0.0px 1.0px 0.0px 0.0px; border-color: transparent #000000 transparent transparent; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">&lt;&nbsp; &lt;=&nbsp; &gt;&nbsp; &gt;=&nbsp; ==&nbsp; !=&nbsp; ===&nbsp; !==&nbsp; ~=</font></div>
</td>
</tr>
<tr class="">
<td valign="top" style="width: 151.0px; height: 11.0px; border-style: solid; border-width: 0.0px 0.0px 0.0px 1.0px; border-color: transparent transparent transparent #000000; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">|</font></div>
</td>
<td valign="top" style="width: 241.0px; height: 11.0px; border-style: solid; border-width: 0.0px 1.0px 0.0px 0.0px; border-color: transparent #000000 transparent transparent; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">&amp;&amp;</font></div>
</td>
</tr>
<tr class="">
<td valign="top" style="width: 151.0px; height: 11.0px; border-style: solid; border-width: 0.0px 0.0px 0.0px 1.0px; border-color: transparent transparent transparent #000000; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">&amp;&amp;</font></div>
</td>
<td valign="top" style="width: 241.0px; height: 11.0px; border-style: solid; border-width: 0.0px 1.0px 0.0px 0.0px; border-color: transparent #000000 transparent transparent; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">||</font></div>
</td>
</tr>
<tr class="">
<td valign="top" style="width: 151.0px; height: 11.0px; border-style: solid; border-width: 0.0px 0.0px 0.0px 1.0px; border-color: transparent transparent transparent #000000; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">||</font></div>
</td>
<td valign="top" style="width: 241.0px; height: 11.0px; border-style: solid; border-width: 0.0px 1.0px 0.0px 0.0px; border-color: transparent #000000 transparent transparent; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#7f7f7f" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; color: rgb(127, 127, 127); -webkit-text-stroke-color: rgb(127, 127, 127);" class="">(default precedence diverges here)</font></div>
</td>
</tr>
<tr class="">
<td valign="top" style="width: 151.0px; height: 11.0px; border-style: solid; border-width: 0.0px 0.0px 0.0px 1.0px; border-color: transparent transparent transparent #000000; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">?:</font></div>
</td>
<td valign="top" style="width: 241.0px; height: 11.0px; border-style: solid; border-width: 0.0px 1.0px 0.0px 0.0px; border-color: transparent #000000 transparent transparent; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">?:</font></div>
</td>
</tr>
<tr class="">
<td valign="top" style="width: 151.0px; height: 11.0px; border-style: solid; border-width: 0.0px 0.0px 0.0px 1.0px; border-color: transparent transparent transparent #000000; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">=&nbsp; @= </font><font face="Menlo" color="#7f7f7f" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; color: rgb(127, 127, 127); -webkit-text-stroke-color: rgb(127, 127, 127);" class="">// for various `@`</font></div>
</td>
<td valign="top" style="width: 241.0px; height: 11.0px; border-style: solid; border-width: 0.0px 1.0px 0.0px 0.0px; border-color: transparent #000000 transparent transparent; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">=&nbsp; @= </font><font face="Menlo" color="#7f7f7f" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; color: rgb(127, 127, 127); -webkit-text-stroke-color: rgb(127, 127, 127);" class="">// for various `@`</font></div>
</td>
</tr>
<tr class="">
<td valign="top" style="width: 151.0px; height: 11.0px; border-style: solid; border-width: 0.0px 0.0px 1.0px 1.0px; border-color: transparent transparent #000000 #000000; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">,</font></div>
</td>
<td valign="top" style="width: 241.0px; height: 11.0px; border-style: solid; border-width: 0.0px 1.0px 1.0px 0.0px; border-color: transparent #000000 #000000 transparent; padding: 4.0px 4.0px 4.0px 4.0px" class=""><div style="margin: 0px; text-align: center;" class=""><font face="Menlo" color="#000000" style="font-size: 10px; line-height: normal; font-family: Menlo; -webkit-font-kerning: none; font-variant-ligatures: common-ligatures; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">-&gt;</font></div>
</td>
</tr>
</tbody>
</table></div><div class=""><br class=""></div><div class="">I think Jacob has a point in separating bitwise operations into their own hierarchy. I'd recommend doing so all the way, but retaining `&amp;` with a higher "bitwise-multiplicative" precedence:</div><div class=""><br class=""></div><div class="">1) Move `<font face="Menlo" class="">|</font>` and `<font face="Menlo" class="">^</font>` into their own parallel precedence groups named <b class="">BitwiseOr</b> and <b class="">BitwiseXor</b>, just above RangeFormation.</div><div class="">2) Move `<font face="Menlo" class="">&amp;</font>` into its own group <b class="">BitwiseAnd</b>, just above both BitwiseOr and BitwiseXor.</div><div class="">3) Move <b class="">BitwiseShift</b> (i.e. `<font face="Menlo" class="">&lt;&lt;</font>` and `<font face="Menlo" class="">&gt;&gt;</font>`) just above BitwiseAnd.</div><div class=""><br class=""></div><div class="">That would make it so that rarely occurring*)&nbsp;expressions mixing `^` and `|` would now need parenthesising, but either of them would work together with `&amp;`, `&lt;&lt;`, and `&gt;&gt;` just like they do in C (and just the way binary addition relates to multiplication in the conventions of mathematics).</div><div class=""><br class=""></div><div class="">*) E.g. none found in&nbsp;<a href="https://graphics.stanford.edu/~seander/bithacks.html" class="">https://graphics.stanford.edu/~seander/bithacks.html</a>.</div><div class=""><br class=""></div><div class="">Also integer arithmetic would stay clearly separated from bitwise operations, which in my experience is the source of most bugs and confusion. E.g. the expressions `<font face="Menlo" class="">a &amp; b + c</font>`, `<font face="Menlo" class="">a | b + c</font>`, and `<font face="Menlo" class="">a &lt;&lt; b - c</font>` all compile in both C and Swift, but are parsed in exactly opposing ways.</div><div class=""><br class=""></div><div class="">The whole hierarchy I'm proposing is illustrated in the attachment below, with all changes found in the top part above RangeFormation.</div><div class=""><br class=""></div><div class="">— Pyry</div><div class=""><br class=""></div><div class=""><img apple-inline="yes" id="29B760C5-0079-4B01-AFB4-4AE5093F9271" height="693" width="586" apple-width="yes" apple-height="yes" src="cid:3085EC6E-0FB3-4534-8234-95D804B6A7CA" class=""></div><div class=""><br class=""></div></body></html>