What is a ^ b and (a & b) << 1?2019 Community Moderator ElectionWhat is the best way to add two numbers without using the + operator?Adding two numbers without + operator (Clarification)adds two numbers without using + or any arithmetic operatorsAdding two numbers without using the addition operatorWhat is the most efficient way to deep clone an object in JavaScript?What is the !! (not not) operator in JavaScript?What is the JavaScript version of sleep()?What does “use strict” do in JavaScript, and what is the reasoning behind it?What is the “-->” operator in C++?What is the difference between call and apply?What is JSONP, and why was it created?Reference — What does this symbol mean in PHP?What are the basic rules and idioms for operator overloading?What does the C ??!??! operator do?
Is "upgrade" the right word to use in this context?
Book about superhumans hiding among normal humans
How do you talk to someone whose loved one is dying?
My adviser wants to be the first author
Problem with FindRoot
Math equation in non italic font
What are substitutions for coconut in curry?
How could an airship be repaired midflight?
World War I as a war of liberals against authoritarians?
Is it insecure to send a password in a `curl` command?
Describing a chess game in a novel
Professor being mistaken for a grad student
Tikz picture of two mathematical functions
Is there a hypothetical scenario that would make Earth uninhabitable for humans, but not for (the majority of) other animals?
How could a scammer know the apps on my phone / iTunes account?
Why did it take so long to abandon sail after steamships were demonstrated?
Is honey really a supersaturated solution? Does heating to un-crystalize redissolve it or melt it?
How well should I expect Adam to work?
Why does energy conservation give me the wrong answer in this inelastic collision problem?
Why no Iridium-level flares from other satellites?
This word with a lot of past tenses
A single argument pattern definition applies to multiple-argument patterns?
How to deal with taxi scam when on vacation?
Do I need to be arrogant to get ahead?
What is a ^ b and (a & b)
2019 Community Moderator ElectionWhat is the best way to add two numbers without using the + operator?Adding two numbers without + operator (Clarification)adds two numbers without using + or any arithmetic operatorsAdding two numbers without using the addition operatorWhat is the most efficient way to deep clone an object in JavaScript?What is the !! (not not) operator in JavaScript?What is the JavaScript version of sleep()?What does “use strict” do in JavaScript, and what is the reasoning behind it?What is the “-->” operator in C++?What is the difference between call and apply?What is JSONP, and why was it created?Reference — What does this symbol mean in PHP?What are the basic rules and idioms for operator overloading?What does the C ??!??! operator do?
I was doing this question in leetcode.
Request:
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.
I can't understand the solution it gave
Could someone explain how this getSum function works?
Here is the answer in JS:
var getSum=function(a,b)
const Sum = a^b; // I can't understand it. Please give me an example to understand it
const carry = (a & b) << 1; //I can't understand it too
if(!carry)
return Sum
return getSum(Sum,carry);
;
console.log(getSum(5,1));javascript operators add
add a comment |
I was doing this question in leetcode.
Request:
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.
I can't understand the solution it gave
Could someone explain how this getSum function works?
Here is the answer in JS:
var getSum=function(a,b)
const Sum = a^b; // I can't understand it. Please give me an example to understand it
const carry = (a & b) << 1; //I can't understand it too
if(!carry)
return Sum
return getSum(Sum,carry);
;
console.log(getSum(5,1));javascript operators add
1
Please edit your question to clarify what it is that you don't understand about those lines. Are you unfamiliar with what the^,&and<<operators do in JavaScript? Or are you just confused about how they can be used to calculate the sum of two numbers? "I can't understand it" is not a good question.
– Ilmari Karonen
4 hours ago
Possible duplicate of Adding two numbers without + operator (Clarification)
– Iłya Bursov
1 hour ago
add a comment |
I was doing this question in leetcode.
Request:
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.
I can't understand the solution it gave
Could someone explain how this getSum function works?
Here is the answer in JS:
var getSum=function(a,b)
const Sum = a^b; // I can't understand it. Please give me an example to understand it
const carry = (a & b) << 1; //I can't understand it too
if(!carry)
return Sum
return getSum(Sum,carry);
;
console.log(getSum(5,1));javascript operators add
I was doing this question in leetcode.
Request:
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.
I can't understand the solution it gave
Could someone explain how this getSum function works?
Here is the answer in JS:
var getSum=function(a,b)
const Sum = a^b; // I can't understand it. Please give me an example to understand it
const carry = (a & b) << 1; //I can't understand it too
if(!carry)
return Sum
return getSum(Sum,carry);
;
console.log(getSum(5,1));var getSum=function(a,b)
const Sum = a^b; // I can't understand it. Please give me an example to understand it
const carry = (a & b) << 1; //I can't understand it too
if(!carry)
return Sum
return getSum(Sum,carry);
;
console.log(getSum(5,1));var getSum=function(a,b)
const Sum = a^b; // I can't understand it. Please give me an example to understand it
const carry = (a & b) << 1; //I can't understand it too
if(!carry)
return Sum
return getSum(Sum,carry);
;
console.log(getSum(5,1));javascript operators add
javascript operators add
edited 8 hours ago
phuclv
15.4k853229
15.4k853229
asked 21 hours ago
JackyJacky
2429
2429
1
Please edit your question to clarify what it is that you don't understand about those lines. Are you unfamiliar with what the^,&and<<operators do in JavaScript? Or are you just confused about how they can be used to calculate the sum of two numbers? "I can't understand it" is not a good question.
– Ilmari Karonen
4 hours ago
Possible duplicate of Adding two numbers without + operator (Clarification)
– Iłya Bursov
1 hour ago
add a comment |
1
Please edit your question to clarify what it is that you don't understand about those lines. Are you unfamiliar with what the^,&and<<operators do in JavaScript? Or are you just confused about how they can be used to calculate the sum of two numbers? "I can't understand it" is not a good question.
– Ilmari Karonen
4 hours ago
Possible duplicate of Adding two numbers without + operator (Clarification)
– Iłya Bursov
1 hour ago
1
1
Please edit your question to clarify what it is that you don't understand about those lines. Are you unfamiliar with what the
^, & and << operators do in JavaScript? Or are you just confused about how they can be used to calculate the sum of two numbers? "I can't understand it" is not a good question.– Ilmari Karonen
4 hours ago
Please edit your question to clarify what it is that you don't understand about those lines. Are you unfamiliar with what the
^, & and << operators do in JavaScript? Or are you just confused about how they can be used to calculate the sum of two numbers? "I can't understand it" is not a good question.– Ilmari Karonen
4 hours ago
Possible duplicate of Adding two numbers without + operator (Clarification)
– Iłya Bursov
1 hour ago
Possible duplicate of Adding two numbers without + operator (Clarification)
– Iłya Bursov
1 hour ago
add a comment |
3 Answers
3
active
oldest
votes
Let's imagine that a = 3 and b = 5
In binary notation they are a = 0011 and b = 0101
XOR:a^b is XOR operator. When compare two bits it returns 0 if they are same and 1 if they are different. 01^10 => 11
So when we're doing a^b result will be 0110 (6 in decimal)
AND + SHIFT
a&b performs logical AND operation. It returns 1 only when a = b = 1.
In our case the result is 0001
<< shifts it(adds 0 on the right side) and result became 0010 which sets carry variable true. (only 0000 will be false).
Next iterations:
Everything repeats but now a = 0110 and b = 0010 (Sum and carry from last execution)
Now a^b = 0100 and (a&b)<<1 = 0100
Repeating again.
Now a^b = 0000 and (a&b)<<1 = 1000
And again.
Now a^b = 1000 and (a&b)<<1 = 0000. Now carry is finally false. And we're returning 1000 which is decimal 8.
Everything worked fine since 3+5=8
1
This only seems to discuss that particular case, not how the algorithm works in general. How are we to know from this that it works for all possible inputs?
– ilkkachu
2 hours ago
You can try any other values, it will work :)
– flppv
12 mins ago
add a comment |
It's basically replicating the half-adder
Adding 2 bits A and B produces 2 outputs: a sum and a carry bit like below
╔═══════╤═════════════╗
║ Input │ Output ║
╠═══╤═══╪═══════╤═════╣
║ A │ B │ carry │ sum ║
╟───┼───┼───────┼─────╢
║ 0 │ 0 │ 0 │ 0 ║
╟───┼───┼───────┼─────╢
║ 1 │ 0 │ 0 │ 1 ║
╟───┼───┼───────┼─────╢
║ 0 │ 1 │ 0 │ 1 ║
╟───┼───┼───────┼─────╢
║ 1 │ 1 │ 1 │ 0 ║
╚═══╧═══╧═══════╧═════╝
From the table we get the logic for the outputs: carry = A and B, sum = A xor B

So the snippet above is working like this
const Sum=a^b; // sum = a xor b
const carry=(a&b)<<1; // carry = 2*(a and b), since we carry to the next bit
if(!carry)
return Sum; // no carry, so sum + carry = sum
return getSum(Sum,carry); // a + b = sum + carry
See also
- Adding two numbers without + operator (Clarification)
- What is the best way to add two numbers without using the + operator?
- adds two numbers without using + or any arithmetic operators
- Adding two numbers without using the addition operator
If I'm not mistaken, it would be more accurate to say it replicates full adder, because of the function's recursive call to itself - one xor plus and stage leading to another.
– Sergiy Kolodyazhnyy
12 hours ago
@SergiyKolodyazhnyy here the input has only a and b which is the half adder. The full adder capability is achieved by the recursive call which gives youa + b + 2*carry. A real full adder takes 3 inputsa + b + carryIn = sum + 2*carryOut
– phuclv
12 hours ago
Might be worth pointing out that it's a half-adder for each bit simultaneously, unlike the truth table that only shows a single bit position.
– ilkkachu
2 hours ago
add a comment |
int result = p ^ q; // XOR Operator, + without carry 0+0=0, 0+1=1+0=1, 1+1=0
int carry = (p & q) << 1; // Left Shift, 1+1=2
if (carry != 0)
return getSum(result, carry);
return result;
Start By p=5,q=6. Then the XOR would be,
0101
0110
------
0011
So, XORing results in (0011) which is actually 3 in decimal. Then ANDing p and q we get,
0101
0110
-------
0100
We get 4 (100 in binary) by ANDing 5 & 6, now if we left shift this value by 1, we get
0100<<1=1000
So we get 8 (1000 in binary) after first recursion.As the result (carry variable) isnt zero, lets recursion again by xor value and carry value.
getSum(3, 8);
So, doing the first XORing we get,
0011
1000
-------
1011
The XORing this time yielded in 11 (1011 binary),so we perform the AND now,
0011
1000
-------
0000
We get all ZERO for ANDing 3 and 8, so this time the left shift operator also results in ZERO, as we have no 1 here which may give us a value by left shifing zeroes.
As the carry variable is now Zero, we come to the end of recursion and the XORed value will be the Sum, which is 11 (1011 in Binary).
Hope you get the working of the procedure. You can learn more by learning bitwise operation, as its the way the machine do the arithmatic operations.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55193135%2fwhat-is-a-b-and-a-b-1%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
Let's imagine that a = 3 and b = 5
In binary notation they are a = 0011 and b = 0101
XOR:a^b is XOR operator. When compare two bits it returns 0 if they are same and 1 if they are different. 01^10 => 11
So when we're doing a^b result will be 0110 (6 in decimal)
AND + SHIFT
a&b performs logical AND operation. It returns 1 only when a = b = 1.
In our case the result is 0001
<< shifts it(adds 0 on the right side) and result became 0010 which sets carry variable true. (only 0000 will be false).
Next iterations:
Everything repeats but now a = 0110 and b = 0010 (Sum and carry from last execution)
Now a^b = 0100 and (a&b)<<1 = 0100
Repeating again.
Now a^b = 0000 and (a&b)<<1 = 1000
And again.
Now a^b = 1000 and (a&b)<<1 = 0000. Now carry is finally false. And we're returning 1000 which is decimal 8.
Everything worked fine since 3+5=8
1
This only seems to discuss that particular case, not how the algorithm works in general. How are we to know from this that it works for all possible inputs?
– ilkkachu
2 hours ago
You can try any other values, it will work :)
– flppv
12 mins ago
add a comment |
Let's imagine that a = 3 and b = 5
In binary notation they are a = 0011 and b = 0101
XOR:a^b is XOR operator. When compare two bits it returns 0 if they are same and 1 if they are different. 01^10 => 11
So when we're doing a^b result will be 0110 (6 in decimal)
AND + SHIFT
a&b performs logical AND operation. It returns 1 only when a = b = 1.
In our case the result is 0001
<< shifts it(adds 0 on the right side) and result became 0010 which sets carry variable true. (only 0000 will be false).
Next iterations:
Everything repeats but now a = 0110 and b = 0010 (Sum and carry from last execution)
Now a^b = 0100 and (a&b)<<1 = 0100
Repeating again.
Now a^b = 0000 and (a&b)<<1 = 1000
And again.
Now a^b = 1000 and (a&b)<<1 = 0000. Now carry is finally false. And we're returning 1000 which is decimal 8.
Everything worked fine since 3+5=8
1
This only seems to discuss that particular case, not how the algorithm works in general. How are we to know from this that it works for all possible inputs?
– ilkkachu
2 hours ago
You can try any other values, it will work :)
– flppv
12 mins ago
add a comment |
Let's imagine that a = 3 and b = 5
In binary notation they are a = 0011 and b = 0101
XOR:a^b is XOR operator. When compare two bits it returns 0 if they are same and 1 if they are different. 01^10 => 11
So when we're doing a^b result will be 0110 (6 in decimal)
AND + SHIFT
a&b performs logical AND operation. It returns 1 only when a = b = 1.
In our case the result is 0001
<< shifts it(adds 0 on the right side) and result became 0010 which sets carry variable true. (only 0000 will be false).
Next iterations:
Everything repeats but now a = 0110 and b = 0010 (Sum and carry from last execution)
Now a^b = 0100 and (a&b)<<1 = 0100
Repeating again.
Now a^b = 0000 and (a&b)<<1 = 1000
And again.
Now a^b = 1000 and (a&b)<<1 = 0000. Now carry is finally false. And we're returning 1000 which is decimal 8.
Everything worked fine since 3+5=8
Let's imagine that a = 3 and b = 5
In binary notation they are a = 0011 and b = 0101
XOR:a^b is XOR operator. When compare two bits it returns 0 if they are same and 1 if they are different. 01^10 => 11
So when we're doing a^b result will be 0110 (6 in decimal)
AND + SHIFT
a&b performs logical AND operation. It returns 1 only when a = b = 1.
In our case the result is 0001
<< shifts it(adds 0 on the right side) and result became 0010 which sets carry variable true. (only 0000 will be false).
Next iterations:
Everything repeats but now a = 0110 and b = 0010 (Sum and carry from last execution)
Now a^b = 0100 and (a&b)<<1 = 0100
Repeating again.
Now a^b = 0000 and (a&b)<<1 = 1000
And again.
Now a^b = 1000 and (a&b)<<1 = 0000. Now carry is finally false. And we're returning 1000 which is decimal 8.
Everything worked fine since 3+5=8
edited 20 hours ago
answered 20 hours ago
flppvflppv
1,222725
1,222725
1
This only seems to discuss that particular case, not how the algorithm works in general. How are we to know from this that it works for all possible inputs?
– ilkkachu
2 hours ago
You can try any other values, it will work :)
– flppv
12 mins ago
add a comment |
1
This only seems to discuss that particular case, not how the algorithm works in general. How are we to know from this that it works for all possible inputs?
– ilkkachu
2 hours ago
You can try any other values, it will work :)
– flppv
12 mins ago
1
1
This only seems to discuss that particular case, not how the algorithm works in general. How are we to know from this that it works for all possible inputs?
– ilkkachu
2 hours ago
This only seems to discuss that particular case, not how the algorithm works in general. How are we to know from this that it works for all possible inputs?
– ilkkachu
2 hours ago
You can try any other values, it will work :)
– flppv
12 mins ago
You can try any other values, it will work :)
– flppv
12 mins ago
add a comment |
It's basically replicating the half-adder
Adding 2 bits A and B produces 2 outputs: a sum and a carry bit like below
╔═══════╤═════════════╗
║ Input │ Output ║
╠═══╤═══╪═══════╤═════╣
║ A │ B │ carry │ sum ║
╟───┼───┼───────┼─────╢
║ 0 │ 0 │ 0 │ 0 ║
╟───┼───┼───────┼─────╢
║ 1 │ 0 │ 0 │ 1 ║
╟───┼───┼───────┼─────╢
║ 0 │ 1 │ 0 │ 1 ║
╟───┼───┼───────┼─────╢
║ 1 │ 1 │ 1 │ 0 ║
╚═══╧═══╧═══════╧═════╝
From the table we get the logic for the outputs: carry = A and B, sum = A xor B

So the snippet above is working like this
const Sum=a^b; // sum = a xor b
const carry=(a&b)<<1; // carry = 2*(a and b), since we carry to the next bit
if(!carry)
return Sum; // no carry, so sum + carry = sum
return getSum(Sum,carry); // a + b = sum + carry
See also
- Adding two numbers without + operator (Clarification)
- What is the best way to add two numbers without using the + operator?
- adds two numbers without using + or any arithmetic operators
- Adding two numbers without using the addition operator
If I'm not mistaken, it would be more accurate to say it replicates full adder, because of the function's recursive call to itself - one xor plus and stage leading to another.
– Sergiy Kolodyazhnyy
12 hours ago
@SergiyKolodyazhnyy here the input has only a and b which is the half adder. The full adder capability is achieved by the recursive call which gives youa + b + 2*carry. A real full adder takes 3 inputsa + b + carryIn = sum + 2*carryOut
– phuclv
12 hours ago
Might be worth pointing out that it's a half-adder for each bit simultaneously, unlike the truth table that only shows a single bit position.
– ilkkachu
2 hours ago
add a comment |
It's basically replicating the half-adder
Adding 2 bits A and B produces 2 outputs: a sum and a carry bit like below
╔═══════╤═════════════╗
║ Input │ Output ║
╠═══╤═══╪═══════╤═════╣
║ A │ B │ carry │ sum ║
╟───┼───┼───────┼─────╢
║ 0 │ 0 │ 0 │ 0 ║
╟───┼───┼───────┼─────╢
║ 1 │ 0 │ 0 │ 1 ║
╟───┼───┼───────┼─────╢
║ 0 │ 1 │ 0 │ 1 ║
╟───┼───┼───────┼─────╢
║ 1 │ 1 │ 1 │ 0 ║
╚═══╧═══╧═══════╧═════╝
From the table we get the logic for the outputs: carry = A and B, sum = A xor B

So the snippet above is working like this
const Sum=a^b; // sum = a xor b
const carry=(a&b)<<1; // carry = 2*(a and b), since we carry to the next bit
if(!carry)
return Sum; // no carry, so sum + carry = sum
return getSum(Sum,carry); // a + b = sum + carry
See also
- Adding two numbers without + operator (Clarification)
- What is the best way to add two numbers without using the + operator?
- adds two numbers without using + or any arithmetic operators
- Adding two numbers without using the addition operator
If I'm not mistaken, it would be more accurate to say it replicates full adder, because of the function's recursive call to itself - one xor plus and stage leading to another.
– Sergiy Kolodyazhnyy
12 hours ago
@SergiyKolodyazhnyy here the input has only a and b which is the half adder. The full adder capability is achieved by the recursive call which gives youa + b + 2*carry. A real full adder takes 3 inputsa + b + carryIn = sum + 2*carryOut
– phuclv
12 hours ago
Might be worth pointing out that it's a half-adder for each bit simultaneously, unlike the truth table that only shows a single bit position.
– ilkkachu
2 hours ago
add a comment |
It's basically replicating the half-adder
Adding 2 bits A and B produces 2 outputs: a sum and a carry bit like below
╔═══════╤═════════════╗
║ Input │ Output ║
╠═══╤═══╪═══════╤═════╣
║ A │ B │ carry │ sum ║
╟───┼───┼───────┼─────╢
║ 0 │ 0 │ 0 │ 0 ║
╟───┼───┼───────┼─────╢
║ 1 │ 0 │ 0 │ 1 ║
╟───┼───┼───────┼─────╢
║ 0 │ 1 │ 0 │ 1 ║
╟───┼───┼───────┼─────╢
║ 1 │ 1 │ 1 │ 0 ║
╚═══╧═══╧═══════╧═════╝
From the table we get the logic for the outputs: carry = A and B, sum = A xor B

So the snippet above is working like this
const Sum=a^b; // sum = a xor b
const carry=(a&b)<<1; // carry = 2*(a and b), since we carry to the next bit
if(!carry)
return Sum; // no carry, so sum + carry = sum
return getSum(Sum,carry); // a + b = sum + carry
See also
- Adding two numbers without + operator (Clarification)
- What is the best way to add two numbers without using the + operator?
- adds two numbers without using + or any arithmetic operators
- Adding two numbers without using the addition operator
It's basically replicating the half-adder
Adding 2 bits A and B produces 2 outputs: a sum and a carry bit like below
╔═══════╤═════════════╗
║ Input │ Output ║
╠═══╤═══╪═══════╤═════╣
║ A │ B │ carry │ sum ║
╟───┼───┼───────┼─────╢
║ 0 │ 0 │ 0 │ 0 ║
╟───┼───┼───────┼─────╢
║ 1 │ 0 │ 0 │ 1 ║
╟───┼───┼───────┼─────╢
║ 0 │ 1 │ 0 │ 1 ║
╟───┼───┼───────┼─────╢
║ 1 │ 1 │ 1 │ 0 ║
╚═══╧═══╧═══════╧═════╝
From the table we get the logic for the outputs: carry = A and B, sum = A xor B

So the snippet above is working like this
const Sum=a^b; // sum = a xor b
const carry=(a&b)<<1; // carry = 2*(a and b), since we carry to the next bit
if(!carry)
return Sum; // no carry, so sum + carry = sum
return getSum(Sum,carry); // a + b = sum + carry
See also
- Adding two numbers without + operator (Clarification)
- What is the best way to add two numbers without using the + operator?
- adds two numbers without using + or any arithmetic operators
- Adding two numbers without using the addition operator
answered 19 hours ago
phuclvphuclv
15.4k853229
15.4k853229
If I'm not mistaken, it would be more accurate to say it replicates full adder, because of the function's recursive call to itself - one xor plus and stage leading to another.
– Sergiy Kolodyazhnyy
12 hours ago
@SergiyKolodyazhnyy here the input has only a and b which is the half adder. The full adder capability is achieved by the recursive call which gives youa + b + 2*carry. A real full adder takes 3 inputsa + b + carryIn = sum + 2*carryOut
– phuclv
12 hours ago
Might be worth pointing out that it's a half-adder for each bit simultaneously, unlike the truth table that only shows a single bit position.
– ilkkachu
2 hours ago
add a comment |
If I'm not mistaken, it would be more accurate to say it replicates full adder, because of the function's recursive call to itself - one xor plus and stage leading to another.
– Sergiy Kolodyazhnyy
12 hours ago
@SergiyKolodyazhnyy here the input has only a and b which is the half adder. The full adder capability is achieved by the recursive call which gives youa + b + 2*carry. A real full adder takes 3 inputsa + b + carryIn = sum + 2*carryOut
– phuclv
12 hours ago
Might be worth pointing out that it's a half-adder for each bit simultaneously, unlike the truth table that only shows a single bit position.
– ilkkachu
2 hours ago
If I'm not mistaken, it would be more accurate to say it replicates full adder, because of the function's recursive call to itself - one xor plus and stage leading to another.
– Sergiy Kolodyazhnyy
12 hours ago
If I'm not mistaken, it would be more accurate to say it replicates full adder, because of the function's recursive call to itself - one xor plus and stage leading to another.
– Sergiy Kolodyazhnyy
12 hours ago
@SergiyKolodyazhnyy here the input has only a and b which is the half adder. The full adder capability is achieved by the recursive call which gives you
a + b + 2*carry. A real full adder takes 3 inputs a + b + carryIn = sum + 2*carryOut– phuclv
12 hours ago
@SergiyKolodyazhnyy here the input has only a and b which is the half adder. The full adder capability is achieved by the recursive call which gives you
a + b + 2*carry. A real full adder takes 3 inputs a + b + carryIn = sum + 2*carryOut– phuclv
12 hours ago
Might be worth pointing out that it's a half-adder for each bit simultaneously, unlike the truth table that only shows a single bit position.
– ilkkachu
2 hours ago
Might be worth pointing out that it's a half-adder for each bit simultaneously, unlike the truth table that only shows a single bit position.
– ilkkachu
2 hours ago
add a comment |
int result = p ^ q; // XOR Operator, + without carry 0+0=0, 0+1=1+0=1, 1+1=0
int carry = (p & q) << 1; // Left Shift, 1+1=2
if (carry != 0)
return getSum(result, carry);
return result;
Start By p=5,q=6. Then the XOR would be,
0101
0110
------
0011
So, XORing results in (0011) which is actually 3 in decimal. Then ANDing p and q we get,
0101
0110
-------
0100
We get 4 (100 in binary) by ANDing 5 & 6, now if we left shift this value by 1, we get
0100<<1=1000
So we get 8 (1000 in binary) after first recursion.As the result (carry variable) isnt zero, lets recursion again by xor value and carry value.
getSum(3, 8);
So, doing the first XORing we get,
0011
1000
-------
1011
The XORing this time yielded in 11 (1011 binary),so we perform the AND now,
0011
1000
-------
0000
We get all ZERO for ANDing 3 and 8, so this time the left shift operator also results in ZERO, as we have no 1 here which may give us a value by left shifing zeroes.
As the carry variable is now Zero, we come to the end of recursion and the XORed value will be the Sum, which is 11 (1011 in Binary).
Hope you get the working of the procedure. You can learn more by learning bitwise operation, as its the way the machine do the arithmatic operations.
add a comment |
int result = p ^ q; // XOR Operator, + without carry 0+0=0, 0+1=1+0=1, 1+1=0
int carry = (p & q) << 1; // Left Shift, 1+1=2
if (carry != 0)
return getSum(result, carry);
return result;
Start By p=5,q=6. Then the XOR would be,
0101
0110
------
0011
So, XORing results in (0011) which is actually 3 in decimal. Then ANDing p and q we get,
0101
0110
-------
0100
We get 4 (100 in binary) by ANDing 5 & 6, now if we left shift this value by 1, we get
0100<<1=1000
So we get 8 (1000 in binary) after first recursion.As the result (carry variable) isnt zero, lets recursion again by xor value and carry value.
getSum(3, 8);
So, doing the first XORing we get,
0011
1000
-------
1011
The XORing this time yielded in 11 (1011 binary),so we perform the AND now,
0011
1000
-------
0000
We get all ZERO for ANDing 3 and 8, so this time the left shift operator also results in ZERO, as we have no 1 here which may give us a value by left shifing zeroes.
As the carry variable is now Zero, we come to the end of recursion and the XORed value will be the Sum, which is 11 (1011 in Binary).
Hope you get the working of the procedure. You can learn more by learning bitwise operation, as its the way the machine do the arithmatic operations.
add a comment |
int result = p ^ q; // XOR Operator, + without carry 0+0=0, 0+1=1+0=1, 1+1=0
int carry = (p & q) << 1; // Left Shift, 1+1=2
if (carry != 0)
return getSum(result, carry);
return result;
Start By p=5,q=6. Then the XOR would be,
0101
0110
------
0011
So, XORing results in (0011) which is actually 3 in decimal. Then ANDing p and q we get,
0101
0110
-------
0100
We get 4 (100 in binary) by ANDing 5 & 6, now if we left shift this value by 1, we get
0100<<1=1000
So we get 8 (1000 in binary) after first recursion.As the result (carry variable) isnt zero, lets recursion again by xor value and carry value.
getSum(3, 8);
So, doing the first XORing we get,
0011
1000
-------
1011
The XORing this time yielded in 11 (1011 binary),so we perform the AND now,
0011
1000
-------
0000
We get all ZERO for ANDing 3 and 8, so this time the left shift operator also results in ZERO, as we have no 1 here which may give us a value by left shifing zeroes.
As the carry variable is now Zero, we come to the end of recursion and the XORed value will be the Sum, which is 11 (1011 in Binary).
Hope you get the working of the procedure. You can learn more by learning bitwise operation, as its the way the machine do the arithmatic operations.
int result = p ^ q; // XOR Operator, + without carry 0+0=0, 0+1=1+0=1, 1+1=0
int carry = (p & q) << 1; // Left Shift, 1+1=2
if (carry != 0)
return getSum(result, carry);
return result;
Start By p=5,q=6. Then the XOR would be,
0101
0110
------
0011
So, XORing results in (0011) which is actually 3 in decimal. Then ANDing p and q we get,
0101
0110
-------
0100
We get 4 (100 in binary) by ANDing 5 & 6, now if we left shift this value by 1, we get
0100<<1=1000
So we get 8 (1000 in binary) after first recursion.As the result (carry variable) isnt zero, lets recursion again by xor value and carry value.
getSum(3, 8);
So, doing the first XORing we get,
0011
1000
-------
1011
The XORing this time yielded in 11 (1011 binary),so we perform the AND now,
0011
1000
-------
0000
We get all ZERO for ANDing 3 and 8, so this time the left shift operator also results in ZERO, as we have no 1 here which may give us a value by left shifing zeroes.
As the carry variable is now Zero, we come to the end of recursion and the XORed value will be the Sum, which is 11 (1011 in Binary).
Hope you get the working of the procedure. You can learn more by learning bitwise operation, as its the way the machine do the arithmatic operations.
edited 20 hours ago
answered 20 hours ago
Ayan_84Ayan_84
520513
520513
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55193135%2fwhat-is-a-b-and-a-b-1%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Please edit your question to clarify what it is that you don't understand about those lines. Are you unfamiliar with what the
^,&and<<operators do in JavaScript? Or are you just confused about how they can be used to calculate the sum of two numbers? "I can't understand it" is not a good question.– Ilmari Karonen
4 hours ago
Possible duplicate of Adding two numbers without + operator (Clarification)
– Iłya Bursov
1 hour ago