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.......
|
|
0
|
|
|
|
Reply
|
imehta285 (3)
|
1/15/2012 9:54:57 AM |
|
ishwar mehta <imehta285@gmail.com> 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
|
|
0
|
|
|
|
Reply
|
3-nospam (285)
|
1/15/2012 10:21:48 AM
|
|
"ishwar mehta" <imehta285@gmail.com> wrote in message
news:a1a4c454-f03c-4fbe-a936-f671b1de8433@v6g2000pba.googlegroups.com...
> 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
|
|
0
|
|
|
|
Reply
|
bc (2211)
|
1/15/2012 10:51:41 AM
|
|
On Jan 15, 9:54=A0am, ishwar mehta <imehta...@gmail.com> wrote:
> HI FRIENDS,SOMEWHERE i have Seen that
>
> Expressions =A0(x%8) and (x&7) =A0in C , are equivalent.. that is
> =A0if i write a program like
>
> int main ()
> {
> =A0 =A0int x=3D50;
> =A0printf("%d\n", x%8);
> =A0printf("%d\n", x&7);
> =A0return 0 ;}
>
> output:
> 2
> 2
try it with more numbers
> SO Frnd,plz help me to figure out ,what is the exact relation betwwen
> the =A0operators =A0% and & .
learn binary
|
|
0
|
|
|
|
Reply
|
nick_keighley_nospam (4574)
|
1/15/2012 12:01:37 PM
|
|
"BartC" <bc@freeuk.com> writes:
> "ishwar mehta" <imehta285@gmail.com> wrote in message
> news:a1a4c454-f03c-4fbe-a936-f671b1de8433@v6g2000pba.googlegroups.com...
>> 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.
|
|
0
|
|
|
|
Reply
|
ben.usenet (6515)
|
1/15/2012 1:42:52 PM
|
|
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.
|
|
0
|
|
|
|
Reply
|
jfbode1029 (227)
|
1/16/2012 5:11:27 PM
|
|
John Bode <jfbode1029@gmail.com> 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) kst-u@mib.org <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"
|
|
0
|
|
|
|
Reply
|
kst-u (21469)
|
1/16/2012 8:03:51 PM
|
|
On Jan 16, 2:03=A0pm, Keith Thompson <ks...@mib.org> wrote:
> John Bode <jfbode1...@gmail.com> writes:
> > There is no relationship between the two. =A0One's an arithmetic
> > operation, the other's a bitwise operation. =A0For 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. =A0Please quote enough context
> from the parent article so your answer makes sense by itself. =A0(And
> don't delete the "Re: " from the subject header.)
>
> --
> Keith Thompson (The_Other_Keith) ks...@mib.org =A0<http://www.ghoti.net/~=
kst>
> =A0 =A0 Will write code for food.
> "We must do something. =A0This is something. =A0Therefore, we must do thi=
s."
> =A0 =A0 -- 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.
|
|
0
|
|
|
|
Reply
|
jfbode1029 (227)
|
1/17/2012 11:43:39 AM
|
|
Ben Bacarisse <ben.use...@bsb.me.uk> wrote:
> "BartC" <b...@freeuk.com> writes:
> > "ishwar mehta" <imehta...@gmail.com> 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
|
|
0
|
|
|
|
Reply
|
airia (1802)
|
1/18/2012 2:19:23 AM
|
|
|
8 Replies
35 Views
(page loaded in 0.151 seconds)
Similiar Articles: How to find semaphore ID from pid - comp.unix.solaris... and experimented with command like ipcs, lsof, ps -ef, to find the relationship between ... Solaris Operating System: How to find semaphore ID from pid ... software.itags ... x86-64 and calling conventions - comp.compilers... meanwhile, others may be left on the stack, and there is no particular relation between ... for example, the don't automatically wrap or unwrap types, lack builtin operators, ...). Differences between multimap and map of vector - comp.lang.c++ ...Differences between multimap and map of vector - comp ... std::map< MyString, MyString > comparison operator ... ... all, May i have your advise on the relation between ... and ... Understanding Send-Q and Recv-Q by netstat - comp.os.linux ...Hello, I do not understand the relationship that may exist between the socket option SO_RCVBUF ... Text colour when using BT operator - comp.text.pdf stream q 0.12 0 0 0 ... Why can not I implicitly convert "Derived **" to "Base * const ...That's because there is no relation between the base types of base** and derived**, which ... riX2 > bool functional_and( riX0 const ... semantics of the built-in operator ... How Does Haas Make This Claim And Get Away With It? - comp.cad ...It's his broom. He's not even an operator as far as I can see. -- Cliff ... should do some research into how machine tools deliver power, and the relationship between ... File locking (Linux) - comp.unix.programmer(In general, the relation between lockf and fcntl is unspecified.) -- Roger Leigh ... File locking - Wikipedia, the free encyclopedia Unix-like operating systems ... f77 and dynamic arrays in common blocks - comp.lang.fortran ...Can be run on just about all operating systems. OpenWatcom supports ... And because of the fixed relationship between integer, single, and double variable size in ... IIR filter design - comp.dsp... advanced programming error is indistinguishable from the Windows 95 Operating ... to design even lower order filters (4th order Butterworth), when the relation between ... To combine string and integer in F90 - comp.lang.fortran ...... you combine dynamic arrays with common ... And because of the fixed relationship between ... string ... concatenate (join) multiple strings in oracle using || operator ... Relational operator - Wikipedia, the free encyclopediaIn computer science, a relational operator is a programming language construct or operator that tests or defines some kind of relation between two entities. These ... What Is the Relationship Between an Operating & a Cash Budget ...Good budgeting keeps your business from spending more than it can afford. Rather than one budget, businesses may have several: cash receipts budget, capital budget ... 7/14/2012 8:16:40 PM
|