associativity of operators

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • subramanian100in@yahoo.com, India

    associativity of operators

    What does "associativ ity of operators" mean ?

    I am unable to undersatand this from K & R 2nd edition. Kindly explain
    with an example.

    Thanks

  • Richard Heathfield

    #2
    Re: associativity of operators

    subramanian100i n@yahoo.com, India said:
    What does "associativ ity 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

    email: rjh at the above domain, - www.

    Comment

    • Richard Harter

      #3
      Re: associativity of operators

      On Fri, 16 Mar 2007 07:29:43 +0000, Richard Heathfield
      <rjh@see.sig.in validwrote:
      >subramanian100 in@yahoo.com, India said:
      >
      >What does "associativ ity 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
      >associativit y 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.
      Nicely said. However it should be pointed out that in Mathematics
      "associativ e" 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.



      Comment

      • Malcolm McLean

        #4
        Re: associativity of operators


        "Richard Harter" <cri@tiac.netwr ote in message
        >
        Nicely said. However it should be pointed out that in Mathematics
        "associativ e" 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.


        Comment

        • Richard Harter

          #5
          Re: associativity of operators

          On Fri, 16 Mar 2007 21:50:06 -0000, "Malcolm McLean"
          <regniztar@btin ternet.comwrote :
          >
          >"Richard Harter" <cri@tiac.netwr ote in message
          >>
          >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
          >unparenthesize d expressions.
          >>
          >And associativity isn't just about notational conventions. It is actually
          >interesting to mathematicians.
          Indeed.



          Comment

          • christian.bau

            #6
            Re: associativity of operators

            On Mar 16, 3:30 pm, c...@tiac.net (Richard Harter) wrote:
            Nicely said. However it should be pointed out that in Mathematics
            "associativ e" 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.

            Comment

            • CBFalconer

              #7
              Re: associativity of operators

              "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.
              <http://cbfalconer.home .att.net>



              --
              Posted via a free Usenet account from http://www.teranews.com

              Comment

              • Dik T. Winter

                #8
                Re: associativity of operators

                In article <45FB6937.DAD16 4A9@yahoo.comcbfalconer@main eline.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/

                Comment

                • Richard Harter

                  #9
                  Re: associativity of operators

                  On Sun, 18 Mar 2007 00:22:40 GMT, "Dik T. Winter" <Dik.Winter@cwi .nl>
                  wrote:
                  >In article <45FB6937.DAD16 4A9@yahoo.comcbfalconer@main eline.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.
                  Likewise the octonians.


                  Comment

                  Working...