码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 算法:只使用一个int类型变量表示日期


    算法书中1.2.4节中有这样一段代码,用y*512+m*32+d来表示日期。

    1. public class Date{
    2. private final int value;
    3. public Date(int y,int m,int d){
    4. value=y*512+m*32+d;
    5. }
    6. public int month() {
    7. return (value / 32) % 16;
    8. }
    9. public int day() {
    10. return value % 32;
    11. }
    12. public int year() {
    13. return value / 512;
    14. }
    15. public String toString() {
    16. return month() + "/" + day() + "/" + year();
    17. }
    18. }

    这里使用到了按位存储的思路。value=y*512+m*32+d。512为2^9,  32为2^5

    day:最大31,小于2^5,用1-5位存储,在上面算式中不做位移调整

    month:最大12,小于2^4,用6-9位存储。m*32即表示左移5位

    year:剩余10位及之后的表示年份。y*512即表示左移9位。

    用个实际日期举例,比如2022/9/18,根据y*512+m*32+d计算得出为1,035,570

    转换为二进制后,为1111 1100 1101 0011 0010

    最后再来说说分别怎么计算的年月日。

    day=value % 32  即二进制数字取最后5位1 0010,转换为10进制就是2^4+2^1=18

    month=(value / 32) % 16 ,首先是/32,即右移5位,变成1111 1100 1101 001,然后%16,即取最后4位1 001,2^3+2^0=9

    year=value / 512,即右移9位,取得111 1110 0110,2^10+2^9+2^8+2^7+2^6+2^5+2^2+2^1=2022

    使用这种方式进行数据保存,所需的空间较少,但是取得所需的年月日的时候,因为需要进行1,2次运算,花费的时间就相对要多一点。是否使用这种方式,则需要根据项目需求来进行考量。

     

  • 相关阅读:
    QT 的打包成一个安装程序 , 其中的问题,和HM Nis Edit 打包成安装程序的时候 没有语言的问题。
    【源码】Spring IOC源码
    【Camera KMD ISP SubSystem笔记】CAM SYNC与DRQ③
    RTL乒乓运算设计
    nc妙用互传文件和发送消息
    7. slot 是什么?有什么作用?原理是什么?
    MS COCO数据集介绍以及pycocotools使用
    前后端分离(SpringBoot)
    前端之【数据可视化】
    Python3,这个方法,应该是读取文件天花板了。
  • 原文地址:https://blog.csdn.net/lzh6hao0/article/details/126913849
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号