PyGuy91
PyGuy91

Reputation: 78

Bitwise C programming

Hey I have been having trouble with a C program. The program I have to write simulates the operation of a VAX computer. I have to take in 2 variables x and y to generate z. within that there are two functions, the first

I'm not asking for someone to do this for me, I just need an explanation on how this is carried out as I have a bare bones of the two functions that I need. I was thinking of something like this but I don't know if it's right at all.

#include<stdio.h>

int main()
{
   int x1 = 1010;
   int y1 = 0101;

   bis(x1, y1);
   bic(x1, y1);
}

/* BIT SET function that sets the result to 1 wherever y = 1 */
int bis (int x, int y)
{
   int z = x & y;

   int result = ?;
   printf("BIT SET: \n\n", result);
   return result;
}

/* BIT CLEAR function that sets result to 0 wherever y = 1 */
int bic(int x, int y)
{
   int z = x & y;

   int result = ?;
   printf("BIT CLEAR:\n\n ", result);
   return result;
}

Apologies for the poor naming conventions. Am I anyway on the right track for this program?

Upvotes: 1

Views: 1658

Answers (2)

poundifdef
poundifdef

Reputation: 19353

Let's look at bitset() first. I won't post C code, but we can solve this on paper as a start.

Say you have your integers with the following bit patterns: x = 1011 and y = 0101. (I'm changing your example numbers. And, incidentally, this is not how you would define two integers having these bit patterns, but right now we're focusing on the logic.)

If I am understanding correctly, when you call bitset(x, y), you want the answer, Z, to be 1111.

x = 1011
y = 0101
     ^ ^-------- Because these two bits have the value 1, then your answer also
                 has to set them to 1 while leaving the other bits in x alone.

Well, which bitwise operation will accomplish this? You have AND (&), OR (\), XOR (^), and COMPLEMENT (~).

In this case, you are ORing the two values. Looking at the following truth table:

x        1 0 1 1
y        0 1 0 1
-----------------
(x OR y) 1 1 1 1

Each bit in the last row is given by ORing that column in x and y. So (1 OR 0) = 1, (0 OR 1) = 1, (1 OR 0) = 1, (1 OR 1) = 1

So now you can write a C function bitset(x, y), ORs x and y, and returns the result as Z.

What bitwise operator - and you can do it in multiple steps with multiple operators - would you use to clear the bits?

                                x  1 0 1 1
                                y  0 1 0 1
-------------------------------------------
(SOME OPERATONS INVOLVING x and y) 1 0 1 0

What would those logical operators (from the list above) be? Think about the "and" and "complement" operators.

Good luck on your hw!

Bonus: A quick primer on expressing integers in C.

int x = 1337 creates an integer and gives it the value 1337. If you said x = 01337, x WILL NOT have the value "1337" like you might expect. By placing the 0 in front of the number, you're telling C that that number is in octal (base 8). The digits "1337", interpreted in base 8, is equivalent to decimal (base 10) 735. If you said x = 0x1337 then you are expressing the number in base 16, as a hexadecimal, equivalent to 4919 in base 10.

Upvotes: 3

BIBD
BIBD

Reputation: 15384

Nope... what you have there will and together two integers. One of which is 1010 (base10), and the other of which is 101 (base 8 - octal -> 65 base 10).

First you'll want to declare your constants as binary (by prefixing them with 0b).

Second, you'll want to out put them (for your instructor or TA) as a binary representation. Check out this question for more ideas

Upvotes: 0

Related Questions