From: Chris Mears Newsgroups: comp.os.msdos.djgpp Subject: Re: odd or even? Organization: only if absoultely necessary Message-ID: References: <38BE28A9 DOT CD476C62 AT student DOT kuleuven DOT ac DOT be> <38BE4B85 DOT 1F5A0778 AT videotron DOT ca> X-Newsreader: Forte Agent 1.7/32.534 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Lines: 60 Date: Thu, 02 Mar 2000 22:19:26 +1100 NNTP-Posting-Host: 139.134.199.97 X-Trace: newsfeeds.bigpond.com 951995582 139.134.199.97 (Thu, 02 Mar 2000 22:13:02 EST) NNTP-Posting-Date: Thu, 02 Mar 2000 22:13:02 EST To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com That Trancelucid really knows where his towel is. On Thu, 02 Mar 2000 06:07:49 -0500, he wrote: >DAVID JACOBS wrote: >> >> What is the fastest way to check wether an int/long is odd or even? >> I've checked my C/C++ manual, but I didn't find anything.... > >Just mask the bit 0.. > >if(i & 0x01) { > printf("odd"); >} >else { > printf("even"); >} I don't know how well this will work with signed integers. I believe the fastest[*] way is: #define EVEN(x) (((x) % 2) == 0) #define ODD(x) (((x) % 2) != 0) I'm not sure how this would work with negative numbers. You could stay out of trouble by using the macros with abs(): if (EVEN(abs(x))) /* number is even... */ But this has its own problem. Consder: void foo(void) { int x; int y; x = INT_MIN; y = abs(INT_MIN); } This will break many implementations, since the smallest negative value that is able to be represented by int will have a greater magnitude that the largest positive value representable by int. Anyway, to answer the question, try the macros at the top of my post. ;-) [*] for specific values of "fastest". -- Chris Mears chris_mears AT softhome DOT net ICQ: 36697123 Herman: How many men do you have? Bart: None. Herman: You'll need more. ---- ``Bart the General''