[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] 批处理怎样判断指定年份是平年还是闰年?

用批处理如何 判断指定年份是平年还是闰年?
比如:
set n=2000
效果:显示2000年是 闰年。
:对于 namejm 的这句代码看不懂,谁能解释一下?

  1. set /a leap="^!(sy %% 4) & ^!(^!(sy %% 100)) | ^!(sy %% 400)"
复制代码

[ 本帖最后由 随风 于 2008-4-19 01:14 编辑 ]
技术问题请到论坛发帖求助!

关键是这里面的两个管道符号搞不懂是什么意识?
set /a leap="^!(sy %% 4) & ^!(^!(sy %% 100)) | ^!(sy %% 400)"
好像在set /a 里面不是起管道作用吧?
技术问题请到论坛发帖求助!

TOP

  1. set /a leap="^!(sy %% 4) & ^!(^!(sy %% 100)) | ^!(sy %% 400)"
复制代码
总算看懂了这段代码的一部分,现根据这段代码得出计算闰年的方法如下:
不管能否被4和100整除,只要能被400整除的就是闰年。
若不能被400整除,但能被4整除,且不能被100整除的也是闰年。
=================================================================
但仍然不懂代码中的 & 和 | 符号是干什么的?
上面代码中的三个取余部分,
1、能被4整除,结果为:1
2、能被100整除,结果为:0
3、能被400整除,结果为:1
将上面的代码分解如下:
:
  1. @echo off
  2. set /a leap="(0&0|1)"
  3. echo %leap%
  4. set /a leap="(0&1|1)"
  5. echo %leap%
  6. set /a leap="(1&0|1)"
  7. echo %leap%
  8. set /a leap="(1&1|1)"
  9. echo %leap%
  10. echo\&echo 不管能否被4和100整除,只要能被400整除的就是闰年。
  11. echo.
  12. set /a leap="(1&1|0)"
  13. echo %leap%
  14. echo\&echo 若不能被400整除,但能被4整除,且不能被100整除的也是闰年。
  15. echo.
  16. set /a leap="(0&0|0)"
  17. echo %leap%
  18. set /a leap="(0&1|0)"
  19. echo %leap%
  20. set /a leap="(1&0|0)"
  21. echo %leap%
  22. echo\&echo 剩下的就是平年。
  23. echo\&pause
复制代码
技术问题请到论坛发帖求助!

TOP

回复 7楼 的帖子

就这个代码来说,好像没有用到 ^ 计算,^ 在这里应该是因为开启了延迟变量,起转义作用
用到的运算符应该是  & | ! 这三种吧。
技术问题请到论坛发帖求助!

TOP

set /a leap="^!(sy %% 4) & ^!(^!(sy %% 100)) | ^!(sy %% 400)"
namejm 都不懂? 不会吧。。
对这段代码,我目前只有 & 符号似懂非懂,其它的都好理解。
& 有人通俗的给我解释为 × 即:乘法,若是这样,那这个代码就明白了。
对于这些  异、域、位什么的。学c的人应该懂吧。谁能讲讲就好。
技术问题请到论坛发帖求助!

TOP

h呵呵,看来 foxjl 还没能真正理解这个代码,
你把他分开来测试就知道了
set /a leap="^!(3 %% 4) "
结果是0 说明什么?
技术问题请到论坛发帖求助!

TOP

  1. 多谢楼上
  2. 还有个问题请教
  3. set /a w="12&5"
  4. 结果为 4
  5. 12 的2 进制为 1100
  6. 5 的 2 进制为 101 补0后为 0101
  7.   1100
  8. & 0101
  9. -------
  10. 结果:4
  11. 能说下结果是怎么得到的 4 吗?
复制代码
技术问题请到论坛发帖求助!

TOP

明白了,结果是2进制 100 转成 10 进制后就是 4
技术问题请到论坛发帖求助!

TOP

返回列表