Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Because division is a slow operation. Even (x + y)/2 would be quicker


Division by 2 is one of the quickest operation. The correct implies 3 additions instead of one, so you go a point.

But y>>1 + x>>1 + (x & y & 1) is easier to remember than ((x^y)>>1) + (x&y).


Dividing by two is just a right shift.


Only if you are dealing with unsigned integers.

For signed integers, you need to be careful depending on the language you are using. Most languages provide a signed right shift that doesn’t lose the sign.

Personally, I think shift should always have been a bitwise operator, without sign extension. To me signed right shift feels as sensible as right shifting a floating point number - a shift is bitwise and not an arithmetical operator. But I guess that’s what comes from being brought up on healthy machine code by robots in the steel jungle.

C recommendation: “INT13-C. Use bitwise operators only on unsigned operands” https://wiki.sei.cmu.edu/confluence/plugins/servlet/mobile?c...


X+y can overflow which is what the post is saying.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: