Asked by J
on 15 Jun 2013

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

*No products are associated with this question.*

Answer by Wayne King
on 15 Jun 2013

Edited by Wayne King
on 15 Jun 2013

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

Show 1 older comment

Wayne King
on 15 Jun 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)

per isakson
on 15 Jun 2013

Yes,

not( [ xor(1,0), xor(0,1), xor(1,1), xor(0,0) ] )

returns

ans = 0 0 1 1

Answer by Roger Stafford
on 16 Jun 2013

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)

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi test

Learn moreOpportunities for recent engineering grads.

Apply Today
## 0 Comments