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));

 Réponse acceptée

Wayne King
Wayne King le 15 Juin 2013
Modifié(e) : Wayne King le 15 Juin 2013
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 commentaires

xor(A,B) is true if one of A and B is true, else false
Wayne King
Wayne King le 15 Juin 2013
Modifié(e) : Wayne King le 15 Juin 2013
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
J
J le 16 Juin 2013
Many thanks. Couldn't wrap my head around the latter part of it.

Connectez-vous pour commenter.

Plus de réponses (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)

Community Treasure Hunt

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

Start Hunting!

Translated by