Sunday, November 24, 2013

C++ Refresher - Operator Precedence


Operator Precedence
(highlighted are the changes from R-value to L-value in C++ compared to C)
Operator      Description                    Result    Associativity

() Grouping exp N/A
() Function call rexp L-R [] Subscript lexp L-R . Structure member lexp L-R -> Structure pointer member lexp L-R ++ Postfix increment rexp L-R -- Postfix decrement rexp L-R
! Logical negate rexp R-L ~ One's complement rexp R-L + Unary plus rexp R-L - Unary minus rexp R-L ++ Prefix increment LEXP R-L -- Prefix decrement LEXP R-L * Indirection (dereference) lexp R-L & Address of rexp R-L sizeof Size in bytes rexp R-L
(type) Type conversion (cast) rexp R-L
* Multiplication rexp L-R / Division rexp L-R % Integer remainder (modulo) rexp L-R
+ Addition rexp L-R - Subtraction rexp L-R
<< Left shift rexp L-R >> Right shift rexp L-R
> Greater than rexp L-R >= Greater than or equal rexp L-R < Less than rexp L-R <= Less than or equal rexp L-R
== Equal to rexp L-R != Not equal to rexp L-R
& Bitwise AND rexp L-R
^ Bitwise exclusive OR rexp L-R
| Bitwise inclusive OR rexp L-R
&& Logical AND rexp L-R
|| Logical OR rexp L-R
?: Conditional LEXP N/A
= Assignment LEXP R-L += Add to LEXP R-L -= Subtract from LEXP R-L *= Multiply by LEXP R-L /= Divide by LEXP R-L %= Modulo by LEXP R-L <<= Shift left by LEXP R-L >>= Shift right by LEXP R-L &= AND with LEXP R-L ^= Exclusive OR with LEXP R-L |= Inclusive OR with LEXP R-L
, Comma rexp L-R


Common non-printing control characters

0 Null 7 Bell 8 Backspace 9 Tab 10 Line feed 13 Carriage return 26 End of file (Ctrl-Z) 27 [Esc] (Escape key) ASCII characters (only 32-127 are standard)
32 64 @ 96 ` 128 € 160   192 + 224   33 ! 65 A 97 a 129  161 ¡ 193 - 225 á 34 " 66 B 98 b 130 ‚ 162 ¢ 194 - 226 A 35 # 67 C 99 c 131 ƒ 163 £ 195 + 227 d 36 $ 68 D 100 d 132 „ 164 ¤ 196 - 228 O 37 % 69 E 101 e 133 … 165 ¥ 197 + 229 ¢ 38 & 70 F 102 f 134 † 166 ¦ 198 Ý 230 æ 39 ' 71 G 103 g 135 ‡ 167 § 199 Ý 231 “ 40 ( 72 H 104 h 136 ˆ 168 ¨ 200 + 232 ™ 41 ) 73 I 105 i 137 ‰ 169 ª 201 + 233 E 42 * 74 J 106 j 138 Š 170 ª 202 - 234 U 43 + 75 K 107 k 139 ‹ 171 « 203 - 235 „ 44 , 76 L 108 l 140 Œ 172 ¬ 204 Ý 236 8 45 - 77 M 109 m 141  173 ­ 205 - 237 ” 46 . 78 N 110 n 142 Ž 174 ® 206 + 238 † 47 / 79 O 111 o 143  175 ¯ 207 - 239 n 48 0 80 P 112 p 144  176 Ý 208 - 240 = 49 1 81 Q 113 q 145 ‘ 177 Ý 209 - 241 ñ 50 2 82 R 114 r 146 ’ 178 Ý 210 - 242 = 51 3 83 S 115 s 147 “ 179 Ý 211 + 243 = 52 4 84 T 116 t 148 ” 180 Ý 212 + 244 ( 53 5 85 U 117 u 149 • 181 Ý 213 + 245 ) 54 6 86 V 118 v 150 – 182 Ý 214 + 246 ö 55 7 87 W 119 w 151 — 183 + 215 + 247 ~ 56 8 88 X 120 x 152 ˜ 184 + 216 + 248 ø 57 9 89 Y 121 y 153 ™ 185 Ý 217 + 249 ú 58 : 90 Z 122 z 154 š 186 Ý 218 + 250 ú 59 ; 91 [ 123 { 155 › 187 + 219 Ý 251 v 60 < 92 \ 124 | 156 œ 188 + 220 _ 252 n 61 = 93 ] 125 } 157  189 + 221 Ý 253 ý 62 > 94 ^ 126 ~ 158 P 190 + 222 Ý 254 Ý 63 ? 95 _ 127 Ý 159 Ÿ 191 + 223 _ 255


%c - characters
%s - strings (NULL terminated C strings)
%d, %i - integers
%f - floating point
%g - floating point (minimum digits)
%e - scientific notation
%p - pointers (displays in hex)
%x - hexadecimal integers
%o - octal integers
%u - unsigned integers
%ld, %li - long integers
%lu - unsigned long integers
%hd, %hi - short integers
%hu - unsigned short integers

C Refresher - Operator Precedence


Operator Precedence
Operator      Description                    Result    Associativity

() Grouping exp N/A
() Function call rexp L-R [] Subscript lexp L-R . Structure member lexp L-R -> Structure pointer member lexp L-R ++ Postfix increment rexp L-R -- Postfix decrement rexp L-R
! Logical negate rexp R-L ~ One's complement rexp R-L + Unary plus rexp R-L - Unary minus rexp R-L ++ Prefix increment rexp R-L -- Prefix decrement rexp R-L * Indirection (dereference) lexp R-L & Address of rexp R-L sizeof Size in bytes rexp R-L
(type) Type conversion (cast) rexp R-L
* Multiplication rexp L-R / Division rexp L-R % Integer remainder (modulo) rexp L-R
+ Addition rexp L-R - Subtraction rexp L-R
<< Left shift rexp L-R >> Right shift rexp L-R
> Greater than rexp L-R >= Greater than or equal rexp L-R < Less than rexp L-R <= Less than or equal rexp L-R
== Equal to rexp L-R != Not equal to rexp L-R
& Bitwise AND rexp L-R
^ Bitwise exclusive OR rexp L-R
| Bitwise inclusive OR rexp L-R
&& Logical AND rexp L-R
|| Logical OR rexp L-R
?: Conditional rexp N/A
= Assignment rexp R-L += Add to rexp R-L -= Subtract from rexp R-L *= Multiply by rexp R-L /= Divide by rexp R-L %= Modulo by rexp R-L <<= Shift left by rexp R-L >>= Shift right by rexp R-L &= AND with rexp R-L ^= Exclusive OR with rexp R-L |= Inclusive OR with rexp R-L
, Comma rexp L-R

ASCII Characters

Common non-printing control characters

0 Null 7 Bell 8 Backspace 9 Tab 10 Line feed 13 Carriage return 26 End of file (Ctrl-Z) 27 [Esc] (Escape key) ASCII characters (only 32-127 are standard)
32 64 @ 96 ` 128 € 160   192 + 224   33 ! 65 A 97 a 129  161 ¡ 193 - 225 á 34 " 66 B 98 b 130 ‚ 162 ¢ 194 - 226 A 35 # 67 C 99 c 131 ƒ 163 £ 195 + 227 d 36 $ 68 D 100 d 132 „ 164 ¤ 196 - 228 O 37 % 69 E 101 e 133 … 165 ¥ 197 + 229 ¢ 38 & 70 F 102 f 134 † 166 ¦ 198 Ý 230 æ 39 ' 71 G 103 g 135 ‡ 167 § 199 Ý 231 “ 40 ( 72 H 104 h 136 ˆ 168 ¨ 200 + 232 ™ 41 ) 73 I 105 i 137 ‰ 169 ª 201 + 233 E 42 * 74 J 106 j 138 Š 170 ª 202 - 234 U 43 + 75 K 107 k 139 ‹ 171 « 203 - 235 „ 44 , 76 L 108 l 140 Œ 172 ¬ 204 Ý 236 8 45 - 77 M 109 m 141  173 ­ 205 - 237 ” 46 . 78 N 110 n 142 Ž 174 ® 206 + 238 † 47 / 79 O 111 o 143  175 ¯ 207 - 239 n 48 0 80 P 112 p 144  176 Ý 208 - 240 = 49 1 81 Q 113 q 145 ‘ 177 Ý 209 - 241 ñ 50 2 82 R 114 r 146 ’ 178 Ý 210 - 242 = 51 3 83 S 115 s 147 “ 179 Ý 211 + 243 = 52 4 84 T 116 t 148 ” 180 Ý 212 + 244 ( 53 5 85 U 117 u 149 • 181 Ý 213 + 245 ) 54 6 86 V 118 v 150 – 182 Ý 214 + 246 ö 55 7 87 W 119 w 151 — 183 + 215 + 247 ~ 56 8 88 X 120 x 152 ˜ 184 + 216 + 248 ø 57 9 89 Y 121 y 153 ™ 185 Ý 217 + 249 ú 58 : 90 Z 122 z 154 š 186 Ý 218 + 250 ú 59 ; 91 [ 123 { 155 › 187 + 219 Ý 251 v 60 < 92 \ 124 | 156 œ 188 + 220 _ 252 n 61 = 93 ] 125 } 157  189 + 221 Ý 253 ý 62 > 94 ^ 126 ~ 158 P 190 + 222 Ý 254 Ý 63 ? 95 _ 127 Ý 159 Ÿ 191 + 223 _ 255

Common printf formatting codes

%c - characters
%s - strings (NULL terminated C strings)
%d, %i - integers
%f - floating point
%g - floating point (minimum digits)
%e - scientific notation
%p - pointers (displays in hex)
%x - hexadecimal integers
%o - octal integers
%u - unsigned integers
%ld, %li - long integers
%lu - unsigned long integers
%hd, %hi - short integers
%hu - unsigned short integers