445,750 Members | 1,187 Online Need help? Post your question and get tips & solutions from a community of 445,750 IT Pros & Developers. It's quick & easy.

# associativity of operators

 P: n/a What does "associativity of operators" mean ? I am unable to undersatand this from K & R 2nd edition. Kindly explain with an example. Thanks Mar 16 '07 #1
8 Replies

 P: n/a su**************@yahoo.com, India said: What does "associativity of operators" mean ? I am unable to undersatand this from K & R 2nd edition. Kindly explain with an example. Consider the following code fragment: int x = 4; int y = 5; int z = 6; int r = x - y - z; printf("r is %d\n", r); What would you expect to be printed? Is it: (a) -7 (b) 5 (c) something else If you answered (a), try to work out why (b) is also plausible. If you answered (b), try to work out why (a) is also plausible. If you answered (c), come back when you're feeling better. :-) Which answer you get depends on the order in which the subtractions are done. 4 - (5 - 6) is different to (4 - 5) - 6. Clearly, precedence cannot answer this question, since subtraction obviously has the same precedence as subtraction! So we need another tool for discriminating between operators at the same precedence level. That tool is 'associativity'. Left-to-right associativity means "do the stuff on the left first, and use the calculated result as input for the stuff on the right", and right-to-left associativity means, of course, the opposite. -- Richard Heathfield "Usenet is a strange place" - dmr 29/7/1999 http://www.cpax.org.uk email: rjh at the above domain, - www. Mar 16 '07 #2

 P: n/a On Fri, 16 Mar 2007 07:29:43 +0000, Richard Heathfield su**************@yahoo.com, India said: >What does "associativity of operators" mean ?I am unable to undersatand this from K & R 2nd edition. Kindly explainwith an example. Consider the following code fragment:int x = 4;int y = 5;int z = 6;int r = x - y - z;printf("r is %d\n", r);What would you expect to be printed?Is it:(a) -7(b) 5(c) something elseIf you answered (a), try to work out why (b) is also plausible.If you answered (b), try to work out why (a) is also plausible.If you answered (c), come back when you're feeling better. :-)Which answer you get depends on the order in which the subtractions aredone. 4 - (5 - 6) is different to (4 - 5) - 6. Clearly, precedencecannot answer this question, since subtraction obviously has the sameprecedence as subtraction!So we need another tool for discriminating between operators at the sameprecedence level. That tool is 'associativity'. Left-to-rightassociativity means "do the stuff on the left first, and use thecalculated result as input for the stuff on the right", andright-to-left associativity means, of course, the opposite. Nicely said. However it should be pointed out that in Mathematics "associative" ordinarily means that it doesn't matter, i.e, if o is an operator and X, Y, Z are elements, then o is associative if (X o Y) o Z = X o (Y o Z) * and + are associative; - and / are not. Left-to-right associativity and right-to-left associativity are conventions for resolving unparenthesized expressions. Mar 16 '07 #3

 P: n/a "Richard Harter" Nicely said. However it should be pointed out that in Mathematics "associative" ordinarily means that it doesn't matter, i.e, if o is an operator and X, Y, Z are elements, then o is associative if (X o Y) o Z = X o (Y o Z) * and + are associative; - and / are not. Left-to-right associativity and right-to-left associativity are conventions for resolving unparenthesized expressions. And associativity isn't just about notational conventions. It is actually interesting to mathematicians. -- Free games and programming goodies. http://www.personal.leeds.ac.uk/~bgy1mm Mar 16 '07 #4

 P: n/a On Fri, 16 Mar 2007 21:50:06 -0000, "Malcolm McLean" "Richard Harter" >Nicely said. However it should be pointed out that in Mathematics"associative" ordinarily means that it doesn't matter, i.e, if o is anoperator and X, Y, Z are elements, then o is associative if(X o Y) o Z = X o (Y o Z)* and + are associative; - and / are not. Left-to-right associativityand right-to-left associativity are conventions for resolvingunparenthesized expressions. And associativity isn't just about notational conventions. It is actuallyinteresting to mathematicians. Indeed. Mar 16 '07 #5

 P: n/a On Mar 16, 3:30 pm, c...@tiac.net (Richard Harter) wrote: Nicely said. However it should be pointed out that in Mathematics "associative" ordinarily means that it doesn't matter, i.e, if o is an operator and X, Y, Z are elements, then o is associative if (X o Y) o Z = X o (Y o Z) * and + are associative; - and / are not. Left-to-right associativity and right-to-left associativity are conventions for resolving unparenthesized expressions. In mathematics, + and * are associative. Especially in floating-point arithmetic, they are not (take x = 1e100, y = -1e100, and z = 1, then (x + y) + z is not the same as x + (y + z). In C, + and * are left associative, so x + y + z is (x + y) + z. Mar 17 '07 #6

 P: n/a "christian.bau" wrote: > .... snip ... > In mathematics, + and * are associative. Especially in floating- point arithmetic, they are not (take x = 1e100, y = -1e100, and z = 1, then (x + y) + z is not the same as x + (y + z). In C, + and * are left associative, so x + y + z is (x + y) + z. Not "in mathematics". For a single example, consider vector multiplication. You need to specify the fields involved, rings, etc. -- Chuck F (cbfalconer at maineline dot net) Available for consulting/temporary embedded and systems. -- Posted via a free Usenet account from http://www.teranews.com Mar 17 '07 #7

 P: n/a In article <45***************@yahoo.comcb********@maineline.net writes: "christian.bau" wrote: ... snip ... In mathematics, + and * are associative. Especially in floating- point arithmetic, they are not (take x = 1e100, y = -1e100, and z = 1, then (x + y) + z is not the same as x + (y + z). In C, + and * are left associative, so x + y + z is (x + y) + z. Not "in mathematics". For a single example, consider vector multiplication. You need to specify the fields involved, rings, etc. In mathematics those are generally not considered standard multiplications. (Inner product and outer product in 3D, and in higher dimension vectors you get into tensors when doing outer products.) But '*' is also not associative in the sedenions. '*' *is* associative in a ring. -- dik t. winter, cwi, kruislaan 413, 1098 sj amsterdam, nederland, +31205924131 home: bovenover 215, 1025 jn amsterdam, nederland; http://www.cwi.nl/~dik/ Mar 18 '07 #8

 P: n/a On Sun, 18 Mar 2007 00:22:40 GMT, "Dik T. Winter" wrote: >In article <45***************@yahoo.comcb********@maineline.net writes: "christian.bau" wrote: > ... snip ... > In mathematics, + and * are associative. Especially in floating- point arithmetic, they are not (take x = 1e100, y = -1e100, and z = 1, then (x + y) + z is not the same as x + (y + z). In C, + and * are left associative, so x + y + z is (x + y) + z. Not "in mathematics". For a single example, consider vector multiplication. You need to specify the fields involved, rings, etc. In mathematics those are generally not considered standard multiplications.(Inner product and outer product in 3D, and in higher dimension vectors youget into tensors when doing outer products.) But '*' is also not associativein the sedenions. '*' *is* associative in a ring. Likewise the octonians. Mar 18 '07 #9

### This discussion thread is closed

Replies have been disabled for this discussion. 