最近被测试部门给提了一个很不是bug的bug,因为这个完全是因为设备的嵌入式操作系统所决定的,但又不得不使用系统提供的时间。也许他们是闲着无聊吧,在我一个时间设置的界面,竟然将当前时间设置到了2050年,结果系统崩了,重启之后时间变成了1970年1月1日。
这个我看了下,应该是unix的时间戳的问题.可以看看这个百度百科。https://baike.baidu.com/item/2038%E5%B9%B4%E9%97%AE%E9%A2%98/10578442
很多的unix(包括类Unix)使用的是POSIX时间,这个时间表示的是从当前时间距离起点时间格林尼治时间1970年1月1日0时0分0秒的秒数。例如今天中午12点,这个值是1502251200。这个值是32位有符号类型,最大值是2的31方减1即2147483647,当时间到达2038年1月19日3时14分08秒时,这个值会溢出而变成负数,造成系统出问题。现在我们生活中很多的电子产品都是采用的嵌入式操作系统,大多数 也应该会有这个2038年的问题,大家使用可要小心,不要随便将时间设置到2038以后的时间。
最后给大家来个题目,看看下面这段程序主要实现的什么功能
long data=2356876906;
int count=0;
while(data)
{
count++;
data&=data-1;
}
如果知道了其功能,用计算器也能算出count的值.