Add Two Numbers Without The "+" Sign (Bit Shifting Basics)

Поділитися
Вставка
  • Опубліковано 24 лис 2024

КОМЕНТАРІ • 503

  • @BackToBackSWE
    @BackToBackSWE  5 років тому +41

    Table of Contents
    The Problem Introduction 0:00 - 0:51
    A Way To Think About Number Bases 0:51 - 3:56
    Back To The Problem At Hand 3:56 - 4:16
    Let's Add Some Numbers (Decimal, Base 10) 4:16 - 4:59
    Let's Add Some Numbers (Binary, Base 2) 4:59 - 7:40
    Bit Shifting Operators: The 'AND' -> '&' 7:40 - 9:41
    Bit Shifting Operators: The 'XOR' -> '^' 9:41 - 11:36
    Bit Shifting Operators: The 'Left Shift' -> '

    • @danavram8437
      @danavram8437 4 роки тому +6

      What do you mean? It also works on negative numbers (great explanation of the whole process btw :) ). I used this algorithm on leetcode in C++ (and it has to work with negative numbers as well). The only catch is that I had to convert the carry to unsigned when doing the left bitshift (which wraps the bits around with 1111....11 (32 bits))
      int getSum(int a, int b) {
      while(b)
      {
      int carry = a & b; // get all carry bits (all 1&1s)
      a = a^b; // sum of disjoint bits (everything except what needs to be carried)

      // shift carry by one, as this is how a regular sum operation works
      // the carry is moved to the next position
      b = (unsigned)carry

    • @BackToBackSWE
      @BackToBackSWE  4 роки тому

      yeah

    • @arunprakash1101
      @arunprakash1101 4 роки тому +14

      Hey !! This explanation is excellent! But I can't see the code for this problem in the description! Is it moved?

    • @willinton06
      @willinton06 4 роки тому

      Arun Prakash same here

    • @anjalibelani5101
      @anjalibelani5101 4 роки тому +7

      Thank you for these videos. However, I dont see the code in the description in any of your videos. Am I missing something?

  • @minhazulislam4682
    @minhazulislam4682 3 роки тому +79

    dude, you need to come back and teach us.
    the world needs more people like you, blackpenredpen, the organic chemistry teacher, 3blue1brown, nick white, tech with tim, jenny it and many more.

    • @albertjtyeh53
      @albertjtyeh53 3 роки тому +1

      is he working at FAANG now?

    • @MrACrazyHobo
      @MrACrazyHobo 3 роки тому +1

      @@albertjtyeh53 Back To Back SWE is at twitter!

    • @dubey_ji
      @dubey_ji 2 роки тому

      Corey Schafer and Sentdex are great too

  • @baichen6449
    @baichen6449 5 років тому +32

    your explanation really helps people who were totally lost, like me.

  • @null5245
    @null5245 5 років тому +124

    u r a good teacher bro!
    Actually i came here because of your comment in leetcode lol :)

    • @BackToBackSWE
      @BackToBackSWE  5 років тому +2

      nice

    • @angelanayiga4060
      @angelanayiga4060 5 років тому +6

      @@BackToBackSWE I do agree you should make comments on all leet code questions you've solved! That's how I landed on B2B SWE!

    • @BackToBackSWE
      @BackToBackSWE  5 років тому +1

      @@angelanayiga4060 hey

    • @harshag5423
      @harshag5423 4 роки тому +1

      @@angelanayiga4060 Now because of your comment I landed on B2B which I didn't even know.

    • @angelamukisa4433
      @angelamukisa4433 4 роки тому

      Harsha G I’m really glad you landed on it and I hope it helps you the way it helped me 🤗🙏🏾

  • @rtothec1234
    @rtothec1234 Рік тому +1

    I took compsci and learned this but could never explain to my friend who couldn’t grasp it. She struggled the whole time.
    This is such a great explanation and you are an excellent teacher.

  • @SR-we1vl
    @SR-we1vl 4 роки тому +3

    Whenever I get stuck on a problem and see if your video is there, I'm relieved! Thank you man!

  • @anniewiley1425
    @anniewiley1425 3 роки тому +3

    Hey man I just wanted to say I think these videos are immensely helpful. The way you explain your thought process on these complex but tiny subjects rashly helps a person change the way they think about code, not to mention learning the lingo of a SWE.
    Also please don't ever lose the awkward endings and outtakes.

  • @vS-xv7vm
    @vS-xv7vm 4 роки тому +5

    Explanation is so good that we won't need to write code for this in interview - just a dry-run with example would do.

  • @CodingForRealLife
    @CodingForRealLife 5 років тому +46

    Now I understand a lot of techniques that I wasn't able to understand before by following your channel, keep it up!

  • @donurukirankumarreddy8872
    @donurukirankumarreddy8872 5 років тому +2

    The best teaching that I have seen in my life till now is yours .

  • @datle5503
    @datle5503 3 роки тому +1

    This is the ultimate guide to this hell of bits manipulation. Thank you so much.

  • @cuteypatootie
    @cuteypatootie 3 роки тому

    I have spent literal years glossing over bitshifting because no explanation could come close to me understanding it. I now have at least a basic knowledge and a starting place. Thank you!

  • @haleygu2171
    @haleygu2171 5 років тому +14

    Faced this problem in an interview with Qualcomm ... I wish I could see this video earlier to come up with bit manipulation solution :( Thanks a lot for clear explaination!

    • @BackToBackSWE
      @BackToBackSWE  5 років тому +2

      nice

    • @prithazz
      @prithazz 4 роки тому +3

      This is a stupid interview question to ask.. honestly, they don't deserve you.

    • @snlagr
      @snlagr 4 роки тому +1

      @@prithazz maybe they wanted to check low level understanding

  • @ShuangyiHu
    @ShuangyiHu 8 місяців тому

    You are such a good teacher! Thanks for breaking down the basics and emphasizing the details!

  • @OhsoLosoo
    @OhsoLosoo 3 роки тому

    Using that ad to cover the redundant statement was brilliant lmao. I would've never noticed it was repeated if you didn't point it out honestly.

  • @Mysticbeing21
    @Mysticbeing21 2 роки тому

    Ive learnt alot today. Ive been struggling these days and i was almost burn out because of the amount of unfinished projects i had. Thank you

  • @maxxxxx93
    @maxxxxx93 5 років тому +4

    very well explained solution!
    i think it’s worth noting that this only really works with positive integers

    • @BackToBackSWE
      @BackToBackSWE  5 років тому +1

      Yeah, true, I'll add that to the notes.

  • @finiteimpulse3765
    @finiteimpulse3765 5 років тому +5

    A short video like this about Two's complement would be great.

  • @hoboshenanigans
    @hoboshenanigans 5 років тому +19

    Dude keep it up, i've learned more from you then my attempt at graduate school lol

  • @ZhenyaVlasov
    @ZhenyaVlasov 5 років тому +5

    Thanks for your vids. I found some inconsistencies with your explanation. At 11:48 you say that when we do shift, '1 gets shifted out'. However, it doesn't.
    As an example, take 0101 (5) and 1101(13)
    When shifting, we add 0 on the right side and if carry started with 1, it will grow as well. We can't loose the first 1 because just like other 1s in the carry, it specify an index where we need to carry over.
    In the provided github code, line 134, it says "1 got shifted out". Again, if we shift it, we will loose part of our answer.
    The reason why, at some point, 'carry' becomes 0 and we brake out of the loop, because on 3rd iteration after increasing the carry by one more digit, we will be performing '&' operation between 4 digit (0010) and 5 digit (10000). The result of it will be 00000.
    Result of the '^' operation will be 10010 (which, again, won't be possible if we lost that left most '1'.
    'carry

    • @BackToBackSWE
      @BackToBackSWE  5 років тому +1

      Woah, a lot to parse, will need to jog my memory on this one. And nice, hey, I'm in Maryland rn so oof

  • @ハイらムハイマん
    @ハイらムハイマん 2 роки тому

    My Brother, since college back in 1999, I haven't had to use it. But, you have refreshed my way of thinking. Thanks and continue to progress forward!!!!

  • @calvinchankf
    @calvinchankf 5 років тому +1

    To begin with, here is an intuitive approach for this question. This is not optimal, but its easier to understand and present to your interviewer(at the beginning)
    def addTwoNumbersWithoutPlus(a, b):
    arr = []
    carry = 0
    while a > 0 or b > 0:
    # get the least significant digit of a
    x = 0
    if a > 0:
    x = a & 1
    a >>= 1
    # get the least significant digit of b
    y = 0
    if b > 0:
    y = b & 1
    b >>= 1
    # add them by using a naive hard-coded table
    num, carry = add(x, y, carry)
    arr.append(num)
    # append the carry if it exists
    if carry > 0:
    arr.append(1)
    # binary to int
    res = 0
    for i in range(len(arr)):
    res += arr[i] * 2**i
    return res
    def add(a, b, carry):
    m = {
    (0, 0, 0): (0, 0),
    (0, 1, 0): (1, 0),
    (1, 0, 0): (1, 0),
    (1, 1, 0): (0, 1),
    (0, 0, 1): (1, 0),
    (0, 1, 1): (0, 1),
    (1, 0, 1): (0, 1),
    (1, 1, 1): (1, 1),
    }
    return m[(a, b, carry)]

  • @CHIRANJIBNANDY1
    @CHIRANJIBNANDY1 5 років тому +7

    Bro...u r a genius.... thanks for making me prepared.

  • @popoffs5273
    @popoffs5273 2 роки тому

    You just explained how computers add on a fundamental level. Well done

  • @musicvoice3030
    @musicvoice3030 4 роки тому +2

    Genuinely explained. Excellent, keep doing your work. You`re a great teacher.

  • @OhsoLosoo
    @OhsoLosoo 3 роки тому

    Love you man. I'm in Graduate school & your videos have helped me so much.

  • @PheezxCoding
    @PheezxCoding 3 роки тому +1

    Your explanations are always so clear and engaging.

  • @waiyanleung5199
    @waiyanleung5199 4 роки тому +1

    Totally understood from zero background. Thumbs up!

  • @AlexanderFilippov-ua
    @AlexanderFilippov-ua 5 років тому +4

    This is the best explanation I've ever seen! Thanks a lot!!!

  • @Oda3908
    @Oda3908 3 роки тому

    5 steps:
    1. base 10 to base 2
    2. while carry > 0
    3. carry = a & b
    4. b = a ^ b
    5. a = carry k = x * (1/2)^k, note that right shift will cut off the decimal part, e.g. 20 >> 3 => 20 * 1/8 => 2.5 = 2

  • @pritomdas6215
    @pritomdas6215 5 років тому +1

    wow...it did take me a lot of rewinding to understand, but thanks to God I finally could get the whole picture of how it works.

  • @thev01d85
    @thev01d85 3 роки тому

    You are extremely talented at teaching this stuff, I have struggled with bitwise operations for a while now, however after watching your explanation I was able to implement this myself, which is a major break through.
    Thank you for this video!

  • @vishaltambrahalli3461
    @vishaltambrahalli3461 2 роки тому +2

    Not able to find the code in the description! Can some let me know if I'm missing something?

  • @AarshSharma
    @AarshSharma 4 роки тому +1

    Haven't seen a better explanation. Kudos.

  • @skullTRTR
    @skullTRTR 5 років тому +1

    Wow finally found someone who can explain things on youtube. Thanks.

    • @BackToBackSWE
      @BackToBackSWE  5 років тому

      sure

    • @skullTRTR
      @skullTRTR 5 років тому +1

      @@BackToBackSWE youtube needs someone who can explain system design questions as well.

    • @BackToBackSWE
      @BackToBackSWE  5 років тому

      @@skullTRTR Gaurav sen

  • @jeromepowell1423
    @jeromepowell1423 2 роки тому

    Great video. Speaking the entire process through like the computer solidified it for me.

  • @firedragontamer8330
    @firedragontamer8330 3 роки тому +2

    Very helpful but the code examples are missing from the description, were they removed?

  • @matthewpourroy1342
    @matthewpourroy1342 Рік тому

    Back To Back SWE + Leetcode + Cracking the Coding Interview = Total Interview prep package

  • @erickbarbosa5476
    @erickbarbosa5476 4 роки тому +1

    This guy was born to teach!

  • @vivaanbaid9975
    @vivaanbaid9975 2 роки тому +1

    love this channel!

    • @BackToBackSWE
      @BackToBackSWE  2 роки тому

      thanks buddy! try our 5 day free mini course for some awesome content - backtobackswe.com/

  • @PiBiNi
    @PiBiNi 4 роки тому +1

    Loved the way you explained even the basics. Thank you.

  • @anujagrawal60
    @anujagrawal60 4 роки тому +1

    Never saw a better explanation than this👏👏👏

  • @youarecorrectiamwrongbecau1338
    @youarecorrectiamwrongbecau1338 5 років тому +2

    Watched on C computer
    Opened UA-cam on phone just to like the video
    Then thought you are really good so suscribed also
    And and and ... (redundant)
    I understand why these kind of stuffs are generally not well explained or no one does some hard work on it because everyone thinks that other DS&A are more important and they mostly form important questions but this concept was required in a programming question where looking to solve at the problem from this perspective seemed improbable. But normal bitwise loop operation would exceed the time limit. The only way was to understand thoroughly how the shifting works and then solve the question in a completely different way and then it passed within time limits. Keep posting concepts like these because they form really difficult questions.

  • @sanapalavenkatesh5273
    @sanapalavenkatesh5273 3 роки тому +1

    Awesome explanation.. By the way once again thank you for ...

  • @kevinkkirimii
    @kevinkkirimii 3 роки тому +1

    I start so well, then I just get lost. I have to find a way to get this concepts in my head permanently.

  • @mallikarjunpidaparthi
    @mallikarjunpidaparthi 4 роки тому +1

    Wow. You made it so simple. Thank you sir.

  • @xulinazrx
    @xulinazrx 4 роки тому

    You are awesome! Your presentation is so clear and easy to understand!

  • @VladimirTheAesthete
    @VladimirTheAesthete 2 роки тому

    That's a pretty intuitive explanation here!

  • @zelmagarza
    @zelmagarza 5 років тому +3

    Great vid! Why isn't it enough to do the following?
    int whereCarry = (a & b)

    • @BackToBackSWE
      @BackToBackSWE  4 роки тому

      I haven't replied to this for a bit, replying to close this out in my "unresponded to comments" feed.

    • @a.yashwanth
      @a.yashwanth 4 роки тому

      Because when you use | it does not add two numbers. If it adds, then we would use a|b directly.

  • @harinijeyaraman8789
    @harinijeyaraman8789 4 роки тому +2

    This was super helpful !! You're amazing at teaching !

  • @cristianouzumaki2455
    @cristianouzumaki2455 4 роки тому +1

    This couldn't have been explained any better.

  • @imagineabout4153
    @imagineabout4153 4 роки тому

    I just started to study this stuff and my mind is like seeing the light

  • @Sarah-il5dr
    @Sarah-il5dr 4 роки тому +1

    You are my go to when comes to all questions!

  • @lets_see_777
    @lets_see_777 5 років тому +3

    best explanation, subbed

  • @Cyber99221
    @Cyber99221 3 роки тому

    Oh wow! Cool, this was a nice refresher. Great video

  • @reemasharma6188
    @reemasharma6188 4 роки тому +2

    You did such a great job at explaining this tedious problem. Please make a video on Dynamic programming concepts as well. :-)

  • @omkargunjal1611
    @omkargunjal1611 5 років тому +2

    Never thought about this logic 😯😯.... Amazing 😍😍

  • @jhessikanda
    @jhessikanda 3 роки тому +1

    hey great video!!! I just couldn´t find the code in the description =(

  • @siddhantsharma4011
    @siddhantsharma4011 Рік тому

    Glad I found this channel. Truly amazing 🎉

    • @BackToBackSWE
      @BackToBackSWE  Рік тому

      Happy Halloween 🎃 Thank you for your kind words, Siddhant! Let us know other topics we could cover! We'd love to offer you 50% Off our exclusive lifetime membership use the code SPOOKY50 - backtobackswe.com/checkout?plan=lifetime-legacy&discount_code=SPOOKY50

  • @TheLovegarg
    @TheLovegarg 4 роки тому +1

    the best video on this question

  • @qiskko
    @qiskko 5 років тому +4

    This is great! but I wish you put the code in your video rather than in the description.

  • @traveltechtaste41
    @traveltechtaste41 4 роки тому +1

    Thanks for explaining this so clearly

  • @Firstusee256
    @Firstusee256 5 років тому +2

    You helped a lot , thank you for making such kind of videos.....

  • @jkim5118
    @jkim5118 5 років тому +3

    I am always impressed with your videos. How do you choose the questions? It seems like you have a set of question that you plan to cover and I can feel that those questions are more relevant to actual skills that we need for interviews (not like brain teasers). Also, what's your plan after to cover all planned questions?

    • @BackToBackSWE
      @BackToBackSWE  5 років тому +1

      I built a list of like 300 when I started this channel. But at some point I just started doing the most burning questions that I felt that I just HAD to try to cover.
      And as for plans after I have many questions covered...eh, I don't know. Here is my rough plan for this project: backtobackswe.com/plans
      I don't think any human can ever cover all questions. But they can cover all topics and concepts.
      This channel is far from the latter.

  • @igo1071
    @igo1071 4 роки тому +1

    U R an excellent teacher 👍🏼thanks a lot ✔️

  • @os2958
    @os2958 3 роки тому

    much better than the technique taught in my grad class

  • @asmitadhungana3790
    @asmitadhungana3790 2 роки тому

    This was a real cool and intuitive explanation! Thanks!

    • @BackToBackSWE
      @BackToBackSWE  2 роки тому

      Thank You, Glad you liked it.
      Do check out backtobackswe.com/platform/content
      and please recommend us to your family and friends :)

  • @yega3k
    @yega3k 4 роки тому +1

    I just tried this in Python. It feels like voodoo!
    a = 1
    b = 3
    while True:
    # 1. carries first
    c = a & b
    # 2. sum with XOR
    a = a ^ b
    if c == 0:
    print(‘ans:’, a) # no carries left, print ans: 4
    break
    # 3. shift carries by one position to the left
    b = c

  • @girishthatte
    @girishthatte 4 роки тому +1

    Awesome explanation covering from basics 🔥

  • @alex-gz7ud
    @alex-gz7ud 3 роки тому

    Thank you for the explanation!!
    You are awesome!!!

  • @hrithikdhanraj2919
    @hrithikdhanraj2919 3 роки тому

    That's simply Great. I appreciate your work. Thanks for the explanation ♥️♥️

  • @abhilashpatel3036
    @abhilashpatel3036 4 роки тому

    So clearly explained, i can't thank enough. 👍

  • @namanshah9216
    @namanshah9216 4 роки тому +1

    What an explanation man! thank you ton!!

  • @harshjoshi2523
    @harshjoshi2523 5 років тому +4

    leetcode brings me here :) Thanks sir you are a good teacher :)

  • @brandongagon
    @brandongagon 4 роки тому +3

    "A problem well stated is a problem half solved" -Charles F. Kettering

  • @tulufokaki6947
    @tulufokaki6947 3 роки тому

    Thank you so much, this solve my wondering for years as not an engineer

  • @pradhumansingh3933
    @pradhumansingh3933 2 роки тому

    Thanks a lot.Ur explaination really cleared my doubt....

  • @cozywanderer
    @cozywanderer 4 роки тому +1

    This was a fantastic explanation!!

  • @humengineerhaijholalekarni8408
    @humengineerhaijholalekarni8408 5 років тому +2

    OMG came from Geeksforgeeks. Thank you so much sir.

  • @Animax590
    @Animax590 3 роки тому

    you really helped with just simple concepts

  • @joydeep-halder
    @joydeep-halder 2 роки тому

    wow. teaching in so simple way. Amazing!

    • @BackToBackSWE
      @BackToBackSWE  2 роки тому

      Thank you, glad you liked it 😀
      Do check out backtobackswe.com/platform/content
      and please recommend us to your family and friends 😀

  • @amanzholdaribay9871
    @amanzholdaribay9871 4 роки тому +2

    Man, that's been interesting and fun to listen to you! Thanks! I got topic)

  • @demigod6190
    @demigod6190 3 роки тому

    Thank you very much. Finally, I got the concept!

  • @dicointech
    @dicointech 5 років тому +2

    Great video. It would be better if you say & is to find 1&1. For example , when 01 + 11, we need to carry at 0&1 as well because of carry from 1&1

    • @BackToBackSWE
      @BackToBackSWE  5 років тому

      Good point. I'll keep this in mind. Though, I feel like 7:52 and 8:32 explain that clearly.

  • @cshivani
    @cshivani 4 роки тому +1

    Excellent, you have put in lot of effort in explaining it, thanks appreciate it!! :)

  • @alexeydemyanchuk
    @alexeydemyanchuk 2 роки тому

    Best explanation, so thank you, man!

  • @shrutiagrawal6065
    @shrutiagrawal6065 4 роки тому +1

    this is really awesome. really loved it gr8 work!!!! all doubts are solved thanks..!!!!

  • @harshinibalaraman7426
    @harshinibalaraman7426 4 роки тому +1

    Thank u very much for explaining me this

  • @khssameernew
    @khssameernew 5 років тому +1

    Excellent explanation, thank you!

  • @ankuragarwal4014
    @ankuragarwal4014 5 років тому +1

    Amazing explanation !! Thanks for your effort

  • @SpiffyFurFamily
    @SpiffyFurFamily 3 роки тому

    Best explanation I've seen. It helped me implement my C# program!
    Could you do a similar video for substraction without using arithmetic operators?

  • @femi_alogba
    @femi_alogba 2 роки тому

    Excellent teacher. Excellent!!

  • @sinify6676
    @sinify6676 3 роки тому

    You always have good lectures here. Just something small (i know the video is old, but w/e): I think saying "how many of each value can we fit" is a bit misleading, since we only ever represent each place with 1 or 0. I personally think it makes more sense to scan from left to right, always checking if the current place fits into the number (updating the new target value as you did). I.e., if you follow this method, there should never come a time where you can fit MORE than 1 value, because that would imply you missed a higher value previously--if I can fit two 8's, I should have used 16.

  • @abhinavghosh725
    @abhinavghosh725 4 роки тому +1

    thnx man!
    really cleared my logic!

  • @kirantomgijo1708
    @kirantomgijo1708 4 роки тому +1

    Wow ! explanation level : Supreme

  • @FreeMayaTutorials
    @FreeMayaTutorials 4 роки тому

    Thank you, I'm learning so much from your lectures!

  • @top-list6450
    @top-list6450 5 років тому +1

    Thank you so much for the clear explanation. Could you please upload video on Division as well

  • @udaysingh7748
    @udaysingh7748 4 роки тому +3

    Commendable !!!Just wow!!!!!!!

  • @amarapanigrahi
    @amarapanigrahi 4 роки тому +1

    Clearly explained, Thanks

  • @r1jsheth
    @r1jsheth 5 років тому +2

    Man!!! This is so helpful!!!