What does this line of code mean in non-code speak?

if (div4 & ~( xor(div100, div400)))
div4 div100 and div400 are given by:
div4 = ((year/4) == floor (year/4));
div100 = ((year/100) == floor (year/100));
div400 = ((year/400) == floor (year/400));

 Accepted Answer

div4, div100, and div400 are all logical variables, 1 or 0.
if (div4 & ~(xor(div100,div400)))
says "if div4 is true (1) and div100 and div400 are both false or both are true, do something"
~xor(div100,div400)
equals 1 (true) only if both div100 and div400 are false or both are true

4 Comments

xor(A,B) is true if one of A and B is true, else false
right, ~xor(A,B) is true only if both are false or both are true (I forgot the both are true condition)
~xor(1,0)
~xor(0,1)
~xor(1,1)
~xor(0,0)
Yes,
not( [ xor(1,0), xor(0,1), xor(1,1), xor(0,0) ] )
returns
ans =
0 0 1 1
Many thanks. Couldn't wrap my head around the latter part of it.

Sign in to comment.

More Answers (2)

In other words, this logical statement is true when 'year' is to be a leap year under the Gregorian calendar. They could just as well have written
if div4&(div100==div400)
or, given the definitions of these quantities,
if div4&(div100<=div400)
or, again given their definitions, even this
if div400|(div4~=div100)

Asked:

J
J
on 15 Jun 2013

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!