【苹果手机时间自动改变】解释为什么iPhone时间调整到1970就变砖头
发布时间:2017-07-12 热点:0
你或许已经得知,在 iPhone 5s 以上的 64 位 iOS 设备上,把时间调整到 1970 年 1 月 1 日,甚至 1970 年的任何时间,都会直接让 iPhone 变砖……
希望你不是通过亲自尝试才了解到的……
事实上,你不需要特别深入的计算机知识,就可以明白为什么 iPhone 将时间调到 1970 年会变砖:
拥有丰富的 iOS 和 Mac 设备 Bug 研究经验的技术人士 Tom Scott 认为,这是 iOS 系统背后的 UNIX 时间戳的整数下溢(Unix Epoch Integer Underflow)所导致的问题。
为此,我们撰写了一份文字版的傻瓜说明,告诉你为什么 iPhone 时间调到 1970 年会变砖。
UNIX 时间
UNIX 时间是当年的计算机工程师们为了在系统中更加清楚明了表达时间,所引入的一个设定。
正常人表达时间是这样的:2016 年 2 月 17 日 下午 12:54:41
UNIX 系统表达时间是这样的:1455684881
你可能会问:为什么计算机不能像正常人那样表达时间呢?
如果你学过中学地理可能会明白,由于全世界有 24 个时区,每个时区在同一时刻的时间都不一样,结果导致如果计算机系统像人一样记录时间将会异常的复杂,导致各种各样的故障。因此,你也可以理解为,UNIX 程序员们为了省事儿,开发了一个小程序……在这个程序的基础上,UNIX 系统再通过你的电脑或手机所处的地理位置计算时区,告诉你正确的时间。
具体来说,协调世界时 1970 年 1 月 1 日 0 时 0 分 0 秒被设定为 UNIX 时间的“零时”。上面那组数字的意义:现在距离 1970 年 1 月 1 日 0 时 0 分 0 秒,过了多少秒。
这个系统一直沿用至今。
明白 UNIX 时间,继续往下讲你就能明白了。
二进制、位元系统、整数溢出和整数下溢
看上去超级复杂的四个词……但别着急,一步一步看你就能看懂。
计算机,包括 PC、手机等等,采用二进制(0 和 1 )来表达一切,因为这意味着计算芯片上每一个晶体管的两个状态:关和开。所有调到 1970 年而变砖的 iOS 设备都是 64 位的。这意味着,这台设备最多可以储存处理 64 个二进制位元,也就是 64 个 0 或 1。
举个例子:我在写到这篇文章的这一段的时候,查了一下当前的时间:
东八区 2016 年 2 月 17 日 下午 12:04:51
然后我拿这个时间到 UNIX 时间转换器里转换了一下,得到:
1455681891
再用十进制转二进制,得到:
01010110110000111111000101100011,
你能看到这段二进制数是 32 位的——32 个 0 或 1。这是因为,直到 2038 年 1 月 19 日的凌晨 3 时 14 分之前,我们的时间在计算机里都可以用 32 位的 UNIX 时间系统,也就是 32 个 0 或 1 来表示。
数位太多可能观察起来有点复杂,不如我们找一个 2 位的系统来说明一下。等号前面是二位数,等号后面是十位:
00 = 0
01 = 1
10 = 2
11 = 3
这意味着一个 2 位的系统最高能计的整数是 3,这个数字在计算机学里叫做“二进制寄存器宽度”。
再找一个 4 位的系统:
0000 = 0, 0001 = 1, 0010 = 2, 0011 = 3, 0100 = 4, 0101 = 5….
以此类推,1111 = 15
一个 4 位 系统最高能计的整数,也即其二进制寄存器宽度是 15。(更方面计算二进制寄存器宽度的公式为 2 的 n 次方 – 1,其中 n 等于系统的位数。)
现在你明白计算机系统的位元系统了!那么整数溢出是怎么回事?
如果你在一个 2 位的系统上尝试计十进制的“4”,会发现系统从“3”的 11 变回了 00;同理,如果你在一个 4 位的系统上尝试计十进制的“16”,会发现系统变回了 0000,这便是“整数溢出”。
再同理,如果你在一个 4 位的系统上尝试计负数,比如 -1 的话,系统会从 0000 跳到 1111,也就是十进制的“15”。这是因为这个整数格式不支持负数,也就是我们讨论的“整数下溢”。
Tom Scott 用电脑游戏《文明》初代里的甘地来解释这个不算 bug 的 bug:游戏初始时,印度执政者甘地的进攻值只有 1(准确反映了现实世界里甘地的“非暴力”哲学思想)。然而在游戏进行中如果不断降低甘地的进攻值,降低到 0 ,进而降低到 0 以下的话,整数系统就乱了,导致甘地的实际进攻值突然被提到最高——这是因为《文明》的系统里采用的整数格式遇到了“整数下溢”……
- 史上最坑爹的游戏8攻略大全_史上最坑爹的游戏8攻略1-24关
- 【cf灵狐者胸部】cf灵狐者全身透视图,cf灵狐者的胸图
- lols7排位结算时间_2017lol排位重置时间 lols7排位结束时间
- 安魂曲(Never Gone)手游新手攻略心得
- 【2017DNF夏日套】DNF2017夏日礼包 DNF2017夏日礼包全内容一览
- 2017LOL世界总决赛赛制_LOLS7总决赛入围赛时间 LOLS7入围赛赛程表
- 王者荣耀闪退怎么办 王者荣耀ios闪退解决办法
- 【qq炫舞时尚旅行攻略】qq炫舞时尚中心设计师生涯sss搭配3s攻略大全(第1-399关)
- 王者荣耀项羽符文怎么搭配 王者荣耀项羽符文搭配推荐
- 英雄联盟S7大嘴天赋怎么点?英雄联盟S7大嘴天赋符文出装攻略
- 相关游戏:
- 【羊角恶魔】洛克王国羊角恶魔怎么得? 洛克王国暗黑咕噜球怎么得?
- 【传奇盛世攻略】《传奇盛世》人物提升战力攻略
- 【我是火影五星忍者排名】我是火影怎么获得五星忍者 开蛋是关键
- 《王者荣耀》刘婵推荐阵容推荐 《王者荣耀》刘婵打法攻略
- 【天天飞车ra车】天天飞车RA车虹光属性
- 全民突击怎么用好AK47 全民突击枪械AK47使用技巧攻略
- 【一目连】阴阳师一目连御魂搭配攻略 一目连阵容搭配详解
- 全民突击K1冰风暴多少钱 全民突击K1冰风暴入手价格详解
- 【苹果6怎样购买游戏】世界上最贵的iPhone 6:可以买一座小岛了
- 王者荣耀露娜对线怎么玩? 《王者荣耀》法师露娜对局实操攻略
- 【传奇挖矿技巧】热血传奇手机版挖矿技巧 升级装备必备
- 【工心计】美人谋权工心计智 《琅琊榜》女野心家一览
- 【时空猎人畅玩版下载】时空猎人电脑版安装使用教程教你轻松畅玩
- 【时空裂痕坐骑】《时空裂痕》星云坐骑获得方法+属性介绍
- 【dnf远古3套属性】DNF暗帝远古3套装属性
- 【雷电芽衣】崩坏3角色培养分析 雷电芽衣全角色培养攻略