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!

12 Years
Discussion Span
Last Post by Tight_Coder_Ex

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


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.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.