C语言中,怎样把日期存储到单个数字中?

本文介绍了一种将日期转换为单个数字的方法,并通过一个C语言程序示例进行了说明。该程序利用位操作来组合年、月、日三个字段。文章还探讨了这种方法的一些潜在问题,如数据验证缺失、日期顺序性和数据提取复杂性。

有好几个原因使你想把日期转换成单个数字,包括为了节省存储空间或进行简单的比较。此外,你也许想用转换所得的数字作为编程结构中的一部分。无论如何,如果你想用单个数字表示日期,你就需要问一下自己为什么要这样做,以及你想怎样处理转换所得的数字。回答这些问题将有助于你确定哪种转换方法最好。首先,请看一个简单的例子:
# include <stdio. h>
# include <stdlib. h>
main ( )
{
    int month, day, year;
    unsigned long result;
    printf(  "Enter Month,  Day, Year : \n");
    fflush(  stdout  ) ;
    scanf( "%d %d %d" ,  &month, &day, &year ))
    result = year;
    result   | =month  << 12;
    result   | =day << 14;
    printf(  "The result is:  %ul. \n" , result );
}
这个程序通过位操作把三个变量转换为单个数字,以下是它的一种运行示例:
    Enter Month,Day,Year:
    11 22 1972
    The result is:470281.

尽管这个程序确实能工作(你可以把它输入计算机测试一下),但它还有一些缺陷。在进一步讨论之前,最好还是先指出其中囊恍┤毕莘直鹗鞘裁础?BR>    你想到其中的某些缺陷了吗?以下是其中的几种缺陷:

  1. 月份、日和年份是不受限制的,这意味着它们的存储区域必须比实际需要的大,而这将牺牲效率。此外,用户可以输入一个任意大的数值,以致超出位域的边界,从而导致一个完全错误的日期。   
  2. 由日期转换而来的数字不是有序的,你不能根据这些数字对日期进行比较,而这种功能却能带来很大的方便。
  3. 各成员在转换所得的数字中的安置是简单的,甚至是随意的,然而把它们抽取出来却不那么简单了(你能想出一个简单的办法吗?)。你真正需要的可能是一种存储日期和抽取日期都比较简单的格式。


下面我们逐个分析这些问题。
月份的范围应该从1到12,日期的范围应该从1到31,然而年份却与众不同。你可以根据你的目的把程序中要使用的年份限制在一个范围内。这个范围是可以变化的,具体视程序的目的而定。有些程序需要使用的日期可能在遥远的过去,而另一些程序需要使用的日期可能在遥远的将来。然而,如果你的程序只需要使用1975到2020之间的年份,你就能节省一位存储空间。显然,在把日期转换成数字之前,你应该先检查日期的各成员,以确保它们都在正确的范围之内。
转载请注明诚信在线下载http://www.ttt8888.com

转载于:https://www.cnblogs.com/gtedsed/p/3156902.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值