954,480 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Problems with bitwise operators

Hi,
I am having problem with the following code.This is on a 32 bit system. The problem statement is:
/* isLess - if x < y then return 1, else return 0
* Example: isLess(4,5) = 1.
* Legal ops: ! ~ & ^ | + << >>
* Max ops: 24
*/

I can't use any loops or - * / !! || < >

My code so far is:

int isLess(int x, int y) {

return (( x + (~y + 1)) >> 31 ) & 1 ;

}


It works for all numbers except for negative numbers:

Test isLess(2147483646[0x7ffffffe],-2[0xfffffffe]) failed.
Gives 1[0x1]. Should be 0[0x0]

I am new to programming and am very green when it comes to the negative numbers!

Any help is appreciated!

scrapper777
Newbie Poster
2 posts since Feb 2005
Reputation Points: 10
Solved Threads: 0
 

Are you sure it should accept negative numbers? The bitwise operators are tricky when working with signed types.

Narue
Bad Cop
Administrator
15,460 posts since Sep 2004
Reputation Points: 6,464
Solved Threads: 1,401
 

Yes, it is suppose to work with negative numbers too...I'm assuming that is the challenging part. I've had to do 15 of these "puzzles" and this was the last one. I dream 1's and 0's now!

I can't figure out how to get the negative ones to work though.

scrapper777
Newbie Poster
2 posts since Feb 2005
Reputation Points: 10
Solved Threads: 0
 

try

((x + ~y) >> 31) & 1
Tight_Coder_Ex
Posting Whiz in Training
215 posts since Feb 2005
Reputation Points: 47
Solved Threads: 17
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You