5 ms·
They couldn't offer an answer at all, or they offered an answer that didn't involve bitwise AND?
by justin66 9y ago
They couldn't offer an answer at all, or they offered an answer that didn't involve bitwise AND?
- craftyguy 9y agoI would think a "if (x % 2 == 1) //odd" would be within the realm of most CS applicants.
- kazinator 9y agoIf x is a signed type, and negative, are you sure the modulus is positive 1? Since ISO C99, C's division operator has been required to truncate toward zero. The % operator harmonizes with that and so it yields negative remainders south of zero. In C90, it was implementation-defined, IIRC. You really just want to test for zero/nonzero, rather than x % 2 == 1.
- craftyguy 9y agoGood point. Interestingly enough, Python seems to handle this appropriately: >>> -4%2 0 >>> -8%2 0 >>> -9%2 1
- panic 9y agoYeah, Python is one of the few languages which actually defines sane behavior for integer division and modulus rather than leaving it up to the hardware. I wish more languages would follow its example!
- triska 9y agoProlog is also like this: ?- x is -4 mod 2. X = 0. ?- X is -8 mod 2. X = 0. ?- X is -9 mod 2. X = 1. Using declarative integer arithmetic, we can even express very generally that a number X is a multiple of 2: ?- X #= 2*_. This is true iff there is any integer (indicated by an anonymous variable _) that, multiplied by 2, yields X. It works for positive and negative integers. For example: ?- -4 #= 2*_. true. ?- -9 #= 2*_. false. A very nice reference on the general topic of bitwise operations is Donald Knuth's Bitwise Tricks and Techniques in Volume 4 of The Art of Computer Programming.
- bakery2k 9y agoGuido has written a blog post explaining "Why Python's Integer Division Floors" [1]. Python also uses floor division, and the corresponding "sign-of-modulo matches sign-of-divisor", for floating-point numbers. The blog post claims that this can be problematic in certain cases (compared to C's "sign-of-modulo matches sign-of-dividend"), but does not give any concrete examples. [1] http://python-history.blogspot.com.au/2010/08/why-pythons-integer-division-floors.html http://python-history.blogspot.com.au/2010/08/why-pythons-in...
- kazinator 9y agoISO C doesn't leave it up to the hardware. Integer division is required to truncate toward zero; the remainder harmonizes with that. (If someone designs a new HLL which leaves some arithmetic to the hardware that C doesn't, that is indeed silly.) The sane language here Common Lisp: it does it in all the ways rather than picking one approach with some hand-waving justification about why it's the good choice. It has truncate, round, ceiling and floor functions that all return a quotient and remainder. There are also mod and rem functions that calculate just the remainder from a floor and truncate, respectively.
- LandR 9y agoIn C# this would be wrong (-123 % 2 == 1).Dump(); Prints False. % in C# is the remainder operator, not canonical modulus.
- deleted 9y ago[deleted]
- craftyguy 9y agoWell that's not confusing at all. Why would C# change the definition of a common operator character?
- bjoli 9y agoI think you would be surprised if you started looking around to see how how % is handled.
- tonyarkles 9y agoJavascript as well: >> -2 % 2 -0 >> -3 % 2 -1 Edit: well, at least in Firefox JS. I have no idea if that's actually standard-mandated behaviour or if it's an implementation quirk. The -0 is especially weird (I had written odd but...)
- justin66 9y agoThis is pretty interesting. I don't use js but I took a quick look and apparently (x % 2) == 0 as a test for even integers should still work properly there, since a comparison of -0 and 0 will consider them equivalent.
- justin66 9y ago> I would think a "if (x % 2 == 1) //odd" would be within the realm of most CS applicants. Yeah, if they can pass a fizzbuzz question they can probably get that. At which point it behooves the interviewer to explain why (x % 2) == 0 to find an even number is a better test...
- throwaway2016a 9y agoThey couldn't offer an answer using bitwise operators. They knew mod 2. Most web developers (front and backend) will never use bitwise and many don't have college degrees so they didn't use it in college. It is actually quite understandable that they won't. I've used bitwise here and there in backend code in my 20+ years of web dev but never in a case where it couldn't be rewritten as slightly less efficient but more readable code.