Operators And Expressions
Operators Arithmetic Operators Relational and Logical Operators Special Operators
Arithmetic Operators Operator Action – Subtraction, also unary minus + Addition * Multiplication / Division % Modulus -- Decrement ++ Increment
Precedence and Associativity Arithmetic Operators: High ++ -- - (unary minus) * / % Low + - - a * b – c ((- a) * b) – c
Expressions inside parentheses are evaluated first. 1 * (2 - 3) Operators on the same level of precedence are evaluated from left to right. (Associativity). 1 + 2 + 3 + 4 –5 (((1 + 2) + 3) + 4) –5
Increment & Decrement Operators Provide a concise notation for incrementing or decrementing a variable by 1. Are unary operators. ++x or x++ --x or x-- Can be applied to variables but not to constants or ordinary expressions. ++i; legal cnt--; legal 777++; illegal ++(a * b -1); illegal
May either prefix or postfix the operand. Prefix ++x; or Postfix x++; x = x + 1; ++ & -- both cause a value of a variable to change in memory. ( Have a side effect).
Increment Postfix: i++; Expression value is the current value (Before you increment) then it increments. “use - then increment” Increment Prefix: ++i; Expression value is the value After you increment. “increment - then use” Decrement Postfix: i--; “use - then decrement” Decrement Prefix: --i; “decrement - then use”
Examples x =10; y = ++x; y 11 x =10; y = x++; y 10 int i = 3, j = 2, k; i++; i j = ++i; j i k = i++; k i k = (--j+3) k j 4 5 5 5 6 7 4
After the assignment to x. m l = 4; n = 3; m = 2; x = l * n + m++; x After the assignment to x. m 14 3
int a, b, c=0; a = ++c; b = c++; a = ? b = ? c= ? int b = 2, d = 4; 7--b*++d 7-((-b)*(++d)) ? int j = 2, k = 3, m = 4; j*=k=m+5 j=(j*(k=(m+5))) ?
int a,b; a = 1; b = 12; printf (“a+++b = %d/n”, a+++b); printf (“a++ +b = %d/n”, a++ +b); printf (“a+ ++b =% d/n”, a+ ++b);
Relational and Logical Operators Relational refer to the relationship that value can have with one another. Logical refers to the ways these relationships can be connected. True is any value other than zero. False is zero.
Relational Operators: > Greater than >= Greater than or equal < Less than <= Less than or equal = = Equal != Not equal Logical Operators: && AND || OR ! NOT
The truth table for the logical operators. True(1), False(0). p q p&&q p || q !p 0 0 0 0 1 0 1 0 1 1 1 1 1 1 0 1 0 0 1 0
Precedence and Associativity High ! > >= < <= = = != && Low || !0&&0||0 ((!0)&&0)||0 FALSE
Associativity: left to right. int x; x = 100; printf(''%d", x>10); __? Both are lower in precedence than the arithmetic operators. 10 > 1 + 12 10 > (1 + 12) FALSE 0 Associativity: left to right.
Examples !A is false (0) if A’s value is: __. is true (1) if A’s value is: __. !!5 ! (!5) ! (0) 1 5 && 3 ?
int i, j = 1; j = j && (i = 2); 1) (i=2) i 2) && j && 2 true && true 1 ( ) needed 2 1
j i j = j && (i = = 3); 1) (i = = 3) false 0 2) && j && 0 0 3) = j 1 2 ( ) not needed
j i j = j || (i/2); 1) (i/2) (2/2) 1 2) || j || 1 true 1 3) = j 2 2 ( ) not needed 1
j i j = !j && (i = i + 1); 1) i + 1 3 2) = i 3) ! !j !1 0 4) && 0 && 3 4) && 0 && 3 5) = j 1 2 3
Lowest precedence of all the operators. The Comma Operator Lowest precedence of all the operators. Causes a sequence of operations, “do this and this and this…”. Is a binary operator. expression_1, expression_2 Associates left to right. expression_1 is evaluated first expression_2 is evaluated second x = (y=3 , y+1); x 4 ( ) needed
The Comma Expression as a whole has the value and type of expression_2. int i = 2; j = 4; j = i++, i - j; * i * j (3-4) higher precedence than , operator 3 2
It allows multiple initializations and multiple processing of indices. for (sum=0 , i=1; i<=n; ++i) sum += i; Comma Operators can be useful in control statements though many “C” advocates discourage their use.
e.g. int i; i = 0; for ( ; i < 10; putchar (‘a’ + i), i++); will output? 3rd expression in the for statement is a comma expression. putchar is called ,executed.Then i is increased. Most commas in a program DO NOT represent comma operators. see text - pg. 99
The ( ) and [ ] Operators Parentheses are operators that increase the precedence of the operations inside them. Square brackets perform array indexing (See Chapter 9 for a discussion of array.) int main(void) { char s[80]; s[3] = 'X'; printf(''%c", s[3]); return 0; }
The Conditional Operator ? Ternary operator. A powerful and convenient operator that replaces certain statements of the if-then-else form. Exp1 ? Exp2: Exp3 Stands for: if Exp1 then Exp2 else Exp3
Examples x = 10; x = 10; if(x>9) y = x>9 ? 100 : 200; y = 100; else y = 200; x = 10; y = x>9 ? 100 : 200;
int i, h, j = 2; i = (j==2) ? 1:3; k = (i>j) ? i:j; i get 1 ( ) not needed i get 1 k get max of I or j
This statement does what? c = (c > =‘a’ && c < = ‘z’) ? c - (‘z’ - ‘Z’):c; IF True - have a Lower case letter in the variable “C”. Exp 2: c - (‘z’ - ‘Z’) will give Capital Letter of whatever is in C. e.g. a - (‘z’ - ‘Z’) 97 - (122 – 90) = 65 which is ‘A’. IF False – Capital Letter and leaves it alone.
Expressions vs. Statements An expression in C is any valid combination of operators, constants, functions and variables. A statement is a valid expression followed by a semicolon. Func1(); A function call as a statement. Y = X + Y; An assignment statement. B + Func1(); Valid?
Null Statement: ; [A semi-colon alone by itself]. Can be useful in loops & conditional statements. The body of a loop could be empty. Scanf(“%d”, &x); While(printf(“%d”,x) , scanf(“%d”,&x)==1) ;
Spacing and Parentheses Redundant or additional parentheses do not cause errors or slow down the execution of an expression. x=10/y-(127/x); x = 10 / y - (127/x); x = y/3-34*temp+127; x = (y/3) - (34*temp) + 127;