我正在研究Unix环境中的高级编程示例,并提出了以下问题:
如果处理时间存储为32位有符号整数,并且系统每秒计算100个滴答,那么该值会溢出多少天?
void proc_ovf()
{
int sec = 60;
int min = 60;
int hour = 24;
int tick = 100;
int epoch_time = (((INT_MAX / (sec * tick)) / min) / hour);
struct tm * timeinfo;
time_t epoch_time_as_proc_t = epoch_time;
timeinfo = localtime(&epoch_time_as_proc_t);
printf("3] overflow date of proc: %s", asctime(timeinfo));
}
以下解决方案是否合理计算溢出前的天数?
(((INT_MAX /(sec * tick))/ min)/小时)
这个计算产生了248天。
答案 0 :(得分:3)
248天看起来不错。
但是你的代码并没有。您的变量名称错误。他们应该是:
int ticks_per_second = 100;
int seconds_per_minute = 60;
int minutes_per_hour = 60;
int hours_per_day = 24;
int ticks = INT_MAX;
int seconds = ticks / ticks_per_second;
int minutes = seconds / seconds_per_minute;
int hours = minutes / minutes_per_hour;
int days = hours / hours_per_day;
printf("overflow after %d days\n", days);
以上代码负责提及测量单位。您能否看到测量单元在代码的第二部分的每一行中取消的程度如何?