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

1 次查看(过去 30 天)
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));

采纳的回答

Wayne King
Wayne King 2013-6-15
编辑:Wayne King 2013-6-15
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 个评论
per isakson
per isakson 2013-6-15
Yes,
not( [ xor(1,0), xor(0,1), xor(1,1), xor(0,0) ] )
returns
ans =
0 0 1 1
J
J 2013-6-16
Many thanks. Couldn't wrap my head around the latter part of it.

请先登录,再进行评论。

更多回答(2 个)

Roger Stafford
Roger Stafford 2013-6-16
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)

Andrei Bobrov
Andrei Bobrov 2013-6-16
~rem(year,4)&rem(year,100)|~rem(year,400)

类别

Help CenterFile Exchange 中查找有关 Dates and Time 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by