Jump to content
xisto Community
Sign in to follow this  
kvarnerexpress

Last Bitwise Problem

Recommended Posts

I'm working on a bitwise problem where I can't use loops or logical operators. I need to return 1 ix x<y else return 0. The valid operators that I can use are ! ~ & ^ | + << >>My code that isn't working so far is:/* isLess - if x < y then return 1, else return 0* Example: isLess(4,5) = 1.* Legal ops: ! ~ & ^ | + << >>* Max ops: 24*/int isLess(int x, int y) {return ((x + (~y + 1)) >> 31 ) ;}It seems to have problems with the negative numbers.Going insane!

Share this post


Link to post
Share on other sites

Wow, I miss the C++ forums for some weeks, and see the changes! Alright, let's see.By ops you mean operations as in statement; not uops right? (assembly stuff) 'Cause otherwise it's crazy. I'm assuming you're talking about 2's complement negatives from your code . It seems your problem is that your code does NOT account for negative numbers. Example:int x = 4; int y = -5return ((x + (~y + 1)) >> 31 ) ;/*Dev-C++ defines int in the range of -32768 to +32767, therefore : */-> return ((4 + (~5 + 1)) >> 31;-> return (4 + -5) >> 31;-> return -1 >> 31;-> return 1;so 4 is less than -5 :D that's ok, I do the same thing at times. I'll get the answer to you when I think of it.

Share this post


Link to post
Share on other sites

I am new to this forum. I was hanging around this c,c++ section for a while and found this question pretty interesting.i have a code sample which i feel can do what is expected.bugs and comments are welcomeint fun1(int num1 ,int num2){int temp1 ,temp2;//if(num1 < num2)//return 1//else//return 0if(num1 >> 31){ if(!(num2 >> 31)) return 1; temp1 = ~(num1 + 0xFFFFFF); temp2 = ~(num2 + 0xFFFFFF); if((~temp2) & temp1) return 1; else return 0;}if((~num1) & num2)return 1;elsereturn 0;}hope this code work for all possible valuesbyessv :)

Share this post


Link to post
Share on other sites

Hello ssv, I tested your sample on Dev-C++ (since I was too lazy to study it) using a range of 0 to 512 and using x and x-1 as parameters of your function.

Here's what it returned:
num1 num2 fun1()
0 -1 1 //ok, good so far
1 0 0 // :)
2 1 1
3 2 0
4 3 1
5 4 0
6 5 1 //ok, I get the picture now...

ad 512... hmm... seems like a odd/even test. Sorry. It looks like you went great depths trying this one. Good try though. By the way, I haven't found a solution myself.

Remember, kvarnerexpress stated that we can't use logical operators, so the if's and else's have to go if you want to declare it a solution.

Here's my test code:

//uses iostream and fstreamint main(){    std::ofstream file("testfile");    int x = 0;    while (x!=512)    {     file << fun1(x,x-1) << "\n";     x++;    }    return 0;}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

Terms of Use | Privacy Policy | Guidelines | We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.