这句执行的结果是 影响 CFGR 的第 19位以上,因为 2<<18 相当于 1<<19,所以影响的最小位是19位,后面那句 1<<16,只影响到CFGR的第16位, 两者不在同一区域,所以互不影响.
而且,后面的 1<<16位,只能第16位是1,其他位全是 0,跟前面的位或,不会影响其他位.
开启一个定时器,在程序当前行和下一行代码上打上断点,调试,运行至代码处,查看定时器计数寄存器值,再运行,继续查看定时器寄存器值,计算出时间差。看程序被编译的汇编代码,通过汇编代码执行周期数计算时间。
struct tm是直观意义上的时间表示方法:struct tm {
int tm_sec/* 秒–取值区间为[0,59] */
int tm_min/* 分 - 取值区间为[0,59] */
int tm_hour/* 时 - 取值区间为[0,23] */
int tm_mday/* 一个月中的日期 - 取值区间为[1,31] */
int tm_mon/* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
int tm_year/* 年份,其值从1900开始 */
int tm_wday/* 星期–取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */
int tm_yday/* 从每年的1月1日开始的天数–取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
int tm_isdst/* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/
long int tm_gmtoff/*指定了日期变更线东面时区中UTC东部时区正秒数或UTC西部时区的负秒数*/
const char *tm_zone/*当前时区的名字(与环境变量TZ有关)*/
}
程序举例#include <stdio.h>
#include <time.h>
int main(void)
{
struct tm *ptr
time_t lt
lt =time(NULL)
ptr=localtime(&lt)
printf("second:%d\n",ptr->tm_sec)
printf("minute:%d\n",ptr->tm_min)
printf("hour:%d\n",ptr->tm_hour)
printf("mday:%d\n",ptr->tm_mday)
printf("month:%d\n",ptr->tm_mon+1)
printf("year:%d\n",ptr->tm_year+1900)
return 0
}
tim 是一个时间计数,是从1900年0分0秒到现在的时间。所以转化从我们日常用的表示一般年要加上1900,月要加上1,而你这里for (i = 1day >= days_in_month(i)i++) 表示月的i是从1开始的,tm_mon不是从0开始,所以day也要+1. 因为日常表示中没有0月0号,只有1月1号
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)