943,742 Members | Top Members by Rank

Ad:
  • C Discussion Thread
  • Marked Solved
  • Views: 955
  • C RSS
You are currently viewing page 1 of this multi-page discussion thread
Sep 21st, 2009
0

Bitwise operators

Expand Post »
I am having trouble understanding how to implement these problems in C using bit operators. I understand the basic logic gates and when I work them out on paper they work just not code wise. Any insight/help would be great.

  1. /*
  2.  * bitXor - x^y using only ~ and &
  3.  * Example: bitXor(4, 5) = 1
  4.  * Legal ops: ~ &
  5.  * Max ops: 14
  6.  * Rating: 2
  7.  */
  8. int bitXor(int x, int y) {
  9. return ~((~((~y)&x))&(~((~x)&y)));
  10. }
  11.  
  12. /*
  13.  * bitAnd - x&y using only ~ and |
  14.  * Example: bitAnd(6, 5) = 4
  15.  * Legal ops: ~ |
  16.  * Max ops: 8
  17.  * Rating: 1
  18.  */
  19. int bitAnd(int x, int y) {
  20. return ~((~x)|(~y));
  21. }
  22.  
  23. /*
  24.  * isEqual - return 1 if x == y, and 0 otherwise
  25.  * Examples: isEqual(5,5) = 1, isEqual(4,5) = 0
  26.  * Legal ops: ! ~ & ^ | + << >>
  27.  * Max ops: 5
  28.  * Rating: 2
  29.  */
  30. int isEqual(int x, int y) {
  31. return !(x ^ y);
  32. }

This is the only one I can get working but I don't think I implemented correctly.

  1. /*
  2.  * isZero - returns 1 if x == 0, and 0 otherwise
  3.  * Examples: isZero(5) = 0, isZero(0) = 1
  4.  * Legal ops: ! ~ & ^ | + << >>
  5.  * Max ops: 2
  6.  * Rating: 1
  7.  */
  8. int isZero(int x) {
  9.  
  10. //FINISHED.
  11.  
  12. return !(x!=0);
  13.  
  14. }

And I can't use loops or conditionals.

Thanks Again.
Similar Threads
Reputation Points: 10
Solved Threads: 0
Light Poster
jralexander137 is offline Offline
33 posts
since Sep 2009
Sep 21st, 2009
0

Re: Bitwise operators

You don't understand the code or the code does not work properly? It seem to work properly for me.
Reputation Points: 350
Solved Threads: 63
Posting Pro
invisal is offline Offline
562 posts
since Mar 2005
Sep 21st, 2009
0

Re: Bitwise operators

Maybe its the test code that I have to use to test it is not working right?

I mean for what I have is the logic correct? I'd post the test code that was given but it's like 330+lines long.
Reputation Points: 10
Solved Threads: 0
Light Poster
jralexander137 is offline Offline
33 posts
since Sep 2009
Sep 21st, 2009
0

Re: Bitwise operators

If I am not wrong, it is logically correct.
Reputation Points: 350
Solved Threads: 63
Posting Pro
invisal is offline Offline
562 posts
since Mar 2005
Sep 21st, 2009
0

Re: Bitwise operators

Maybe its the test code that I have to use to test it is not working right?

I mean for what I have is the logic correct? I'd post the test code that was given but it's like 330+lines long.
Some quickie test code for my "playing along at home":
#include <stdio.h>

/* 
 * bitXor - x^y using only ~ and & 
 *   Example: bitXor(4, 5) = 1
 *   Legal ops: ~ &
 *   Max ops: 14
 *   Rating: 2
 */
int bitXor(int x, int y)
{
   return ~((~((~y)&x))&(~((~x)&y)));
}

/* 
 * bitAnd - x&y using only ~ and | 
 *   Example: bitAnd(6, 5) = 4
 *   Legal ops: ~ |
 *   Max ops: 8
 *   Rating: 1
 */
int bitAnd(int x, int y)
{
   return ~((~x)|(~y));
}

/* 
 * isEqual - return 1 if x == y, and 0 otherwise 
 *   Examples: isEqual(5,5) = 1, isEqual(4,5) = 0
 *   Legal ops: ! ~ & ^ | + << >>
 *   Max ops: 5
 *   Rating: 2
 */
int isEqual(int x, int y)
{
   return !(x ^ y);
}

/*
 * isZero - returns 1 if x == 0, and 0 otherwise 
 *   Examples: isZero(5) = 0, isZero(0) = 1
 *   Legal ops: ! ~ & ^ | + << >>
 *   Max ops: 2
 *   Rating: 1
 */
int isZero(int x)
{
   return !(x!=0);
}

int test_unary(const char *name, int (*f)(int), int value)
{
   int result = f(value);
   printf("%s(%d) = %d\n", name, value, result);
   return result;
}

int test_binary(const char *name, int (*f)(int, int), int x, int y)
{
   int result = f(x, y);
   printf("%s(%d,%d) = %d\n", name, x, y, result);
   return result;
}

#define printpair(x) #x,x

int main()
{
   test_binary(printpair(bitXor),  4, 5);
   test_binary(printpair(bitAnd),  6, 5);
   test_binary(printpair(isEqual), 5, 5);
   test_binary(printpair(isEqual), 4, 5);
   test_unary(printpair(isZero), 0);
   test_unary(printpair(isZero), 5);
   return 0;
}

/* my output
bitXor(4,5) = 1
bitAnd(6,5) = 4
isEqual(5,5) = 1
isEqual(4,5) = 0
isZero(0) = 1
isZero(5) = 0
*/
Team Colleague
Reputation Points: 2780
Solved Threads: 312
long time no c
Dave Sinkula is offline Offline
4,790 posts
since Apr 2004
Sep 21st, 2009
0

Re: Bitwise operators

I keep getting errors along these lines when I test bitAnd though these are the same general error type for the rest just a dif number for the should be parts.

Gives 2[0x]. Should be 0[0x0].

Then next line down.

Gives 2[0x2]. Should be -21474836[0x80000000].
Reputation Points: 10
Solved Threads: 0
Light Poster
jralexander137 is offline Offline
33 posts
since Sep 2009
Sep 21st, 2009
0

Re: Bitwise operators

For what inputs?
  1. int main()
  2. {
  3. test_binary(printpair(bitAnd), 0xC0000000, 0x80000000);
  4. return 0;
  5. }
  6.  
  7. /* my output
  8. bitAnd(-1073741824,-2147483648) = -2147483648
  9. */
Team Colleague
Reputation Points: 2780
Solved Threads: 312
long time no c
Dave Sinkula is offline Offline
4,790 posts
since Apr 2004
Sep 21st, 2009
0

Re: Bitwise operators

Here is the code that will test my methods. This is given and should not be modified.

I have tried to attach it.
Attached Files
File Type: c btest.c (9.5 KB, 23 views)
File Type: c tests.c (676 Bytes, 14 views)
Last edited by jralexander137; Sep 21st, 2009 at 3:28 pm.
Reputation Points: 10
Solved Threads: 0
Light Poster
jralexander137 is offline Offline
33 posts
since Sep 2009
Sep 21st, 2009
0

Re: Bitwise operators

I've worked out bitAnd and isEqual on paper and they should work but they don't when coded.

isEqual

  1. return (~x & y) >> 3;

bitAnd

  1. (~((~(x | (~y)) | ((~x) | y))) << 1
Reputation Points: 10
Solved Threads: 0
Light Poster
jralexander137 is offline Offline
33 posts
since Sep 2009
Sep 21st, 2009
0

Re: Bitwise operators

Added template code for methods looks like you need in order to compile btest.
Attached Files
File Type: c bits.c (5.7 KB, 26 views)
Reputation Points: 10
Solved Threads: 0
Light Poster
jralexander137 is offline Offline
33 posts
since Sep 2009

This thread is solved

Either the thread starter or a moderator has marked this thread as solved. You can most likely trust the responses and answers given. There is most likely no reason for any further responses to be posted here. If you have a related question, please start a new thread in this forum instead.

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in C Forum Timeline: need help....urgent.pls
Next Thread in C Forum Timeline: Byte Reversal





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC