RELATION BETWEEN OPERATORS

Discussion in 'C Programming' started by ishwar mehta, Jan 15, 2012.

  1. ishwar mehta

    ishwar mehta Guest

    HI FRIENDS,SOMEWHERE i have Seen that

    Expressions (x%8) and (x&7) in C , are equivalent.. that is
    if i write a program like


    int main ()
    {
    int x=50;
    printf("%d\n", x%8);
    printf("%d\n", x&7);
    return 0 ;
    }
    output:
    2
    2

    SO Frnd,plz help me to figure out ,what is the exact relation betwwen
    the operators % and & .

    plzzzzzzz.......
    ishwar mehta, Jan 15, 2012
    #1
    1. Advertising

  2. ishwar mehta

    Dr Nick Guest

    ishwar mehta <> writes:

    > HI FRIENDS,SOMEWHERE i have Seen that


    In your homework assignment?

    > Expressions (x%8) and (x&7) in C , are equivalent.. that is


    They aren't.

    > if i write a program like
    >
    >
    > int main ()
    > {
    > int x=50;


    try it with x=-50 and you'll see the difference.

    > printf("%d\n", x%8);
    > printf("%d\n", x&7);
    > return 0 ;
    > }
    > output:
    > 2
    > 2
    >
    > SO Frnd,plz help me to figure out ,what is the exact relation betwwen
    > the operators % and & .


    What does the % operator do?

    What does the & operator do?

    Why will they give the same results for some range of values (NB, this
    is maths rather than C).

    > plzzzzzzz.......


    Can you take that bee out of here please, it's driving me nuts.
    --
    Online waterways route planner | http://canalplan.eu
    Plan trips, see photos, check facilities | http://canalplan.org.uk
    Dr Nick, Jan 15, 2012
    #2
    1. Advertising

  3. ishwar mehta

    BartC Guest

    "ishwar mehta" <> wrote in message
    news:...
    > HI FRIENDS,SOMEWHERE i have Seen that
    >
    > Expressions (x%8) and (x&7) in C , are equivalent.. that is
    > if i write a program like
    >
    >
    > int main ()
    > {
    > int x=50;
    > printf("%d\n", x%8);
    > printf("%d\n", x&7);
    > return 0 ;
    > }
    > output:
    > 2
    > 2
    >
    > SO Frnd,plz help me to figure out ,what is the exact relation betwwen
    > the operators % and & .


    The results of A%N and A&(N-1) will generally be different.

    But if N is a power of 2 as in your example, eg 2**M, then it's not
    difficult to see why they might be expected to be the same (both isolate the
    last M bits of A).

    --
    Bartc
    BartC, Jan 15, 2012
    #3
  4. On Jan 15, 9:54 am, ishwar mehta <> wrote:
    > HI FRIENDS,SOMEWHERE i have Seen that
    >
    > Expressions  (x%8) and (x&7)  in C , are equivalent.. that is
    >  if i write a program like
    >
    > int main ()
    > {
    >    int x=50;
    >  printf("%d\n", x%8);
    >  printf("%d\n", x&7);
    >  return 0 ;}
    >
    > output:
    > 2
    > 2


    try it with more numbers

    > SO Frnd,plz help me to figure out ,what is the exact relation betwwen
    > the  operators  % and & .


    learn binary
    Nick Keighley, Jan 15, 2012
    #4
  5. "BartC" <> writes:

    > "ishwar mehta" <> wrote in message
    > news:...
    >> HI FRIENDS,SOMEWHERE i have Seen that
    >>
    >> Expressions (x%8) and (x&7) in C , are equivalent.. that is
    >> if i write a program like
    >>
    >>
    >> int main ()
    >> {
    >> int x=50;
    >> printf("%d\n", x%8);
    >> printf("%d\n", x&7);
    >> return 0 ;
    >> }
    >> output:
    >> 2
    >> 2
    >>
    >> SO Frnd,plz help me to figure out ,what is the exact relation betwwen
    >> the operators % and & .

    >
    > The results of A%N and A&(N-1) will generally be different.
    >
    > But if N is a power of 2 as in your example, eg 2**M, then it's not
    > difficult to see why they might be expected to be the same (both
    > isolate the last M bits of A).


    But they don't both do that. % is defined (in C99) as an essentially
    arithmetic operation, while & is defined in terms of the representation.
    This is most clearly seen when A is negative. -2 % 8 is -2 no matter
    what representation is used for negative numbers, but -2 & 7 is either
    6, 5 or 2 depending on which of the three representations for negative
    numbers is in use.

    I know you were thinking of positive N, but I think it confuses the
    issue to look at the cases when they *are* the same. The relationship
    between things that have some similarity is almost always made most
    clear by pointing out the differences.

    --
    Ben.
    Ben Bacarisse, Jan 15, 2012
    #5
  6. ishwar mehta

    John Bode Guest

    There is no relationship between the two. One's an arithmetic operation, the other's a bitwise operation. For some combinations of operands they will produce the same results, but that's by coincidence, not design.
    John Bode, Jan 16, 2012
    #6
  7. John Bode <> writes:
    > There is no relationship between the two. One's an arithmetic
    > operation, the other's a bitwise operation. For some combinations of
    > operands they will produce the same results, but that's by
    > coincidence, not design.


    The question was about the relationship between (x%8) and (x&7), but you
    can't tell that by reading your answer. Please quote enough context
    from the parent article so your answer makes sense by itself. (And
    don't delete the "Re: " from the subject header.)

    --
    Keith Thompson (The_Other_Keith) <http://www.ghoti.net/~kst>
    Will write code for food.
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"
    Keith Thompson, Jan 16, 2012
    #7
  8. ishwar mehta

    John Bode Guest

    On Jan 16, 2:03 pm, Keith Thompson <> wrote:
    > John Bode <> writes:
    > > There is no relationship between the two.  One's an arithmetic
    > > operation, the other's a bitwise operation.  For some combinations of
    > > operands they will produce the same results, but that's by
    > > coincidence, not design.

    >
    > The question was about the relationship between (x%8) and (x&7), but you
    > can't tell that by reading your answer.  Please quote enough context
    > from the parent article so your answer makes sense by itself.  (And
    > don't delete the "Re: " from the subject header.)
    >
    > --
    > Keith Thompson (The_Other_Keith)  <http://www.ghoti.net/~kst>
    >     Will write code for food.
    > "We must do something.  This is something.  Therefore, we must do this."
    >     -- Antony Jay and Jonathan Lynn, "Yes Minister"


    Blame Google Groups' mobile interface; I *thought* it was quoting
    context, but it turned out it wasn't. As lame as GG can be, it's even
    lamer on Android.
    John Bode, Jan 17, 2012
    #8
  9. Ben Bacarisse <> wrote:
    > "BartC" <> writes:
    > > "ishwar mehta" <> wrote
    > >> ...i have Seen that
    > >> Expressions (x%8) and (x&7) in C , are equivalent..


    If x is an unsigned type, or signed with a non-negative value, yes.

    > >> that is if i write a program like
    > >>
    > >> int main ()
    > >> {
    > >> int x=50;
    > >> printf("%d\n", x%8);
    > >> printf("%d\n", x&7);
    > >> return 0 ;
    > >> }
    > >> output:
    > >> 2
    > >> 2
    > >>
    > >> SO Frnd,plz help me to figure out ,what is the exact relation
    > >> betwwen the operators % and & .


    The % operator yields 'what remains' from division; the & operator
    yields
    'what remains' if you exclude certain value bits.

    > > The results of A%N and A&(N-1) will generally be different.
    > >
    > > But if N is a power of 2 as in your example, eg 2**M, then it's not
    > > difficult to see why they might be expected to be the same (both
    > > isolate the last M bits of A).

    >
    > But they don't both do that. % is defined (in C99) as an essentially
    > arithmetic operation,


    No less in C90.

    > while & is defined in terms of the representation.


    Yes and no. It operates on value and sign bits, but not padding bits.
    One can think of x % 1000 as a decimal-wise masking of value places,
    so
    there is a relation between &1, &3, &7, ... and %10, %100, %1000...

    > This is most clearly seen when A is negative.


    In the general case, C programmers shouldn't be using bitwise
    operators
    on signed types. If we limited the discussion to unsigned types, then
    in that (ideal) environment, your point is of no consequence.

    Under C90, division needn't round towards zero, so even for %, there
    is a case to limit use to non-negative integers for consistent
    results.

    Of course, the real question is when to use &7 and when to use %8.
    The answer to that depends on context. If you want the remainder when
    dividing by 8, then use %. If you want the lower 3 bits, then use &.

    Whilst division can be expensive on some CPUs, most modern compilers
    are more than good enough to optimise %8 without programmer
    assistance.

    If you see &7 used in place of %8, then you're just witnessing someone
    using something that was clever and critcal 40+ years ago, not
    something
    that's clever or critical now. Or, if there's a case where the
    compiler
    isn't optimising %8 to &7, then it's more likely the code isn't using
    the most practical type for the operation at hand (e.g. using int
    rather
    than size_t.)

    --
    Peter
    Peter Nilsson, Jan 18, 2012
    #9
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Rashmi Panduranga

    Relation between Points & Pixels

    Rashmi Panduranga, May 16, 2005, in forum: ASP .Net
    Replies:
    2
    Views:
    3,575
    Rashmi Panduranga
    May 17, 2005
  2. =?Utf-8?B?U2NvdHQgYXQgQ2VkYXIgQ3JlZWs=?=

    Help! How can I set up a relation between 2 tables in memory?

    =?Utf-8?B?U2NvdHQgYXQgQ2VkYXIgQ3JlZWs=?=, Feb 26, 2006, in forum: ASP .Net
    Replies:
    4
    Views:
    491
    Eliyahu Goldin
    Feb 26, 2006
  3. Naresh Agarwal
    Replies:
    1
    Views:
    1,037
    ExGuardianReader
    May 29, 2004
  4. Ganesh
    Replies:
    3
    Views:
    492
    Rolf Magnus
    May 10, 2005
  5. Satya
    Replies:
    1
    Views:
    1,229
    jmcgill
    May 16, 2006
Loading...

Share This Page