answersLogoWhite

0


Best Answer

Normally you wouldn't, you'd simply use the built-in addition operator (+):

x = 15 + 7; // e.g., x = 22

However, Behind the Scenes, the computer uses bitwise operations to determine the sum and it is presumed the question relates to how this is actually achieved. In other words, how can we emulate these machine-level operations in code?

We start with a half-adder. A half-adder has two input bits, the two bits being summed (denoted A and B), and two output bits, the sum bit and the carry-out bit (denoted S and Cout). The half-adder truth table looks like this:

A + B = S, Cout

0 + 0 = 0, 0

0 + 1 = 1, 0

1 + 0 = 1, 0

1 + 1 = 0, 1

The sum bit is determined using a XOR gate (A XOR B) while the carry-out bit is determined using an AND gate (A AND B).

By itself, a half-adder only works for the least-significant bit of a sum (it is just a 1-bit adder after all). To sum multi-bit values we need to implement a full-adder for each bit in the sum. A full-adder is more difficult to implement than a half-adder because it has three inputs rather than just two.

One of the inputs is the carry-in bit (denoted Cin), which is actually the Cout bit from the full-adder for the next least-significant bit. Thus to sum two multi-bit values we use a cascade of full-adders, one for each bit in the sum, where the Cout from one full-adder becomes the Cin for the next.

A full-adder has the following truth table:

Cin + A + B = S, Cout 0 + 0 + 0 = 0, 0

0 + 0 + 1 = 1, 0

0 + 1 + 0 = 1, 0

0 + 1 + 1 = 0, 1

1 + 0 + 0 = 1, 0

1 + 0 + 1 = 0, 1

1 + 1 + 0 = 0, 1

1 + 1 + 1 = 1, 1

A full-adder is implemented using two half-adders joined by an OR gate. Input bits A and B pass through the first half-adder to produce a partial sum. The SUM bit of that half-adder then passes through the second half-adder along with the Cin bit to produce the final SUM bit of the full-adder. Meanwhile, the Cout bits from both half-adders pass through an OR gate to determine the Cout bit of the full-adder. That is, if the Cout bit is set by either of the half-adders, then the Cout must also be set for the full-adder.

Going back to the original example, the sum of 15 and 7, we proceed as follows:

15 + 7 in binary is 00001111 + 00000111

We start at bit 0 (least-significant bit) and pass the inputs through a cascade of full-adders, passing the Cout bit from one full-adder through the Cin to the next:

Cin + A + B = S, Cout

0 + 1 + 1 = 0, 1

1 + 1 + 1 = 1, 1

1 + 1 + 1 = 1, 1

1 + 1 + 0 = 0, 1

1 + 0 + 0 = 1, 0

0 + 0 + 0 = 0, 0

0 + 0 + 0 = 0, 0

0 + 0 + 0 = 0, 0

Reading the S column upwards we find the sum is 00010110 which is 22 decimal. Note that if the Cout of the final-adder is set, the sum has overflowed

To emulate these machine-level operations in C++, we first need to create a class to hold the two output bits:

struct output {

unsigned sum;

unsigned cout;

};

Note that an unsigned data type will occupy more than one bit, however the only valid values will be 0 or 1. Implementing this as a class would make it easier to maintain this invariant, however we'll use a simple data structure for the sake of brevity.

To implement the half-adder, we use the following code:

output half_adder (unsigned a, unsigned b) {

// both inputs must be in the range [0:1]

return output {a^b, a&b};

}

To implement the full-adder, we use the following code:

output full-adder (unsigned cin, unsigned a, unsigned b) {

// all inputs must all be in the range [0:1]

output one {half_adder (a, b)};

output two {half_adder (one.sum, cin)};

return output {two.sum, one.cout | two.cout};

}

To add two 8-bit values using the full-adder, we use the following code:

unsigned sum_8bit (unsigned a, unsigned b} {

unsigned sum=0;

output out {0, 0};

for (unsigned i=0; i<8; ++i) {

out=full_adder (out.cout, a&1, b&1);

sum|=(out.sum<<i);

a>>=1;

b>>=1;

}

if (out.cout) throw std::range_error {"sum_8bit(): out of range"};

return sum;

}

We can test the code with a simple assertion:

int main() {

assert (sum (15, 7)==22);

return 0;

}

User Avatar

Wiki User

6y ago
This answer is:
User Avatar

Add your answer:

Earn +20 pts
Q: How do you use bitwise operators to calculate 15 plus 7?
Write your answer...
Submit
Still have questions?
magnify glass
imp
Continue Learning about Engineering

What is the use of Bitwise operators?

AnswerThe bitwise operators treat a number as its binary equivalent rather than as a simple boolean value.For most programming languages, a value of zero is considered FALSE and all other values are TRUEThus, 8 AND 11 returns TRUE as does 3 OR 0In bitwise analysis, each binary bit of the digit are compared. The number of bits compared will depend on the type of number.In C, a CHAR is usually 8 bits and can hold the binary numbers 0 to 255.If we compare 8 (00001000) and 19 (00010011) with bitwise operators, we get different results from Boolean operators:8 BITWISE AND 19 returns 0 (each bit in the response is set to 1 if both equivalent bits compared are 1) but 8 BITWISE OR 19 will return 27.The utility of these methods is in identifying binary data. For example, all files on a PC have the characteristics 'Hidden' 'Read Only' 'Archive' and 'System' which can be set or unset using bitwise operations on a single byte of data. In truth this is a throwback to the days of small memory capacities where saving the odd byte was essential.There are more uses of bitwise, especially in graphics, where XOR can be used to paint a sprite image to display it and then be used again to return a background to its former settings. I regret I lack the skill to explain this better.


What is use of l in c language?

Bitwise OR.


How do you calculate the size of a class in memory in C plus plus?

Use sizeof( ).


Which procedure is used to convert a string representation of a number into its binary value?

The first step is to use a function to convert the number (integer, floating point or otherwise) into a string. The next step is to convert each character within that string to its binary equivalent. Converting an unsigned char to binary will require the use of bitwise operators, specifically &amp;, &lt;&lt; and &gt;&gt;. There are plenty of code snippets on the Web that show you how to accomplish this task, however it might be worth your while to work it out on paper first and then write the code. The best recommendation at this point is to explore bitwise operators in C and understand how binary math works. You'll likely find many uses for this knowledge in the future.


How is the precedence of operators in an expression overridden in most languages?

Precedence of operators in an expression overridden by the use of parentheses

Related questions

What is the use of bitwise operator in c plus plus?

They perform bitwise operations like AND (&amp;), OR (|), XOR (^) and NOT (~).


How is a bitwise copy created in c plus plus?

You could just use memcpy(3), using sizeof() to get the object size.


What are special formulas that do not use operators to calculate a result?

functions


What are the arithmetic instructions that calculate in the spreadsheet called?

They usually are called operators. You can use addition, subtraction, multiplication, division, and exponents as operators. You can combine operators with functions.


How do you swap two variables using bitwise operators?

a := a XOR b b := a XOR b a := a XOR b it works, but never use it in real programs do you know why its not used in real program??


What is the use of Bitwise operators?

AnswerThe bitwise operators treat a number as its binary equivalent rather than as a simple boolean value.For most programming languages, a value of zero is considered FALSE and all other values are TRUEThus, 8 AND 11 returns TRUE as does 3 OR 0In bitwise analysis, each binary bit of the digit are compared. The number of bits compared will depend on the type of number.In C, a CHAR is usually 8 bits and can hold the binary numbers 0 to 255.If we compare 8 (00001000) and 19 (00010011) with bitwise operators, we get different results from Boolean operators:8 BITWISE AND 19 returns 0 (each bit in the response is set to 1 if both equivalent bits compared are 1) but 8 BITWISE OR 19 will return 27.The utility of these methods is in identifying binary data. For example, all files on a PC have the characteristics 'Hidden' 'Read Only' 'Archive' and 'System' which can be set or unset using bitwise operations on a single byte of data. In truth this is a throwback to the days of small memory capacities where saving the odd byte was essential.There are more uses of bitwise, especially in graphics, where XOR can be used to paint a sprite image to display it and then be used again to return a background to its former settings. I regret I lack the skill to explain this better.


What is used to test value of character or integer in c plus plus?

Use the comparison operators (==, &lt;, &lt;=, &gt;, &gt;=). All primitives (including char and int) support these built-in operators.


What is use of l in c language?

Bitwise OR.


What is the definition of bitwise?

Bitwise operations are those that operate on one or more bits of data, as opposed to larger units of data. For example, in C++, there are the bitwise operators "^" (exclusive or), "&amp;" (and), "|" (or), and "~" (bitwise complement). Using these symbols, it is possible to determine if a bit is set or unset, combine sets of bits, find common bits, or invert all the bits at once. This allows the use of a single field (such as an int variable) to hold multiple pieces of data. Algorithms that concern themselves with saving space, such as compression algorithms, embedded system code, and so on, will often use bitfields instead of entire bytes of data whenever practical.


What are valid Excel arithmetic operators?

The following are valid Excel operators for arithmetic: + (plus) - (minus) / (divide) * (multiply) ^ (power of) These can help you create operations, which would be your formulas that use the operators: =A2+A7 =10^2


How do you calculate the size of a class in memory in C plus plus?

Use sizeof( ).


Which procedure is used to convert a string representation of a number into its binary value?

The first step is to use a function to convert the number (integer, floating point or otherwise) into a string. The next step is to convert each character within that string to its binary equivalent. Converting an unsigned char to binary will require the use of bitwise operators, specifically &amp;, &lt;&lt; and &gt;&gt;. There are plenty of code snippets on the Web that show you how to accomplish this task, however it might be worth your while to work it out on paper first and then write the code. The best recommendation at this point is to explore bitwise operators in C and understand how binary math works. You'll likely find many uses for this knowledge in the future.