解释为什么iPhone时间调整到1970就变砖头[图]
举个例子:我在写到这篇文章的这一段的时候,查了一下当前的时间:
东八区 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 以下的话,整数系统就乱了,导致甘地的实际进攻值突然被提到最高——这是因为《文明》的系统里采用的整数格式遇到了“整数下溢”……
这么傻帽的问题为什么解决不了?
-
老师你听我解释啊最新版40MB解谜游戏
-
宝贝你听我解释小游戏31MB益智休闲
-
火柴人弓神传说最新版36MB飞行射击
-
沙城烈刃手游102MB | 角色扮演2023-12-11
-
火柴人战场乱斗游戏86MB | 动作游戏2023-12-11
-
鬼灭之刀官方版342MB | 动作游戏2023-12-11
-
元梦之星琴谱工具下载安装3MB | 益智休闲2023-12-11
-
星际争霸机甲联盟游戏65MB | 角色扮演2023-12-11
-
元梦之星装扮大全免费版1MB | 动作游戏2023-12-11
(您有什么疑问或想说的,尽管说,我们会第一时间做出反馈!) 回复 [ ] 楼取消回复