[571] Can’t Sleep

Title Text:If androids someday DO dream of electric sheep, don’t forget to declare sheepCount as a long int.

Origin:https://xkcd.com/571/

https://www.explainxkcd.com/wiki/index.php/571:_Can%27t_Sleep

失眠

那一刻猛然吓醒的感觉真是刻骨铭心。

https://songshuhui.net/archives/50001

Cueball躺在床上,睡不着觉。当他们跳过篱笆时,他试图计算绵羊的旧备用,但是当达到32,767只绵羊时,65535只羊跳回篱笆并从-32,768再次开始计数。这是对整数溢出的引用,当增加的量(在这种情况下为绵羊)突然溢出并显示为负值时。这是因为当整数或整数以数字形式表示时,例如在计算机上,数字的范围受到用于存储它的空间量的限制。当超过给定存储空间的最大可能数量时,发生算术溢出,这可能导致(取决于所使用的语言等)在给定存储空间的情况下以尽可能少的数量开始。这与汽车的里程表完全不同。想象一下六位数的里程表达到999999.在再行驶一英里或一公里后,数字将回滚到000000.导致或未能防止整数溢出是程序员可能会遇到软件安全后果的常见错误。某些语言(如C /C ++)甚至会使有符号整数溢出未定义的行为,它可能会或可能不会包装到开头,指令可能被忽略或可能导致软件崩溃。

在这种情况下,最小和最大可能的数字是-32,768和32,767,这意味着使用的存储空间将是16位。此外,很明显,该号码被指定为有符号数字,这意味着它可以是正数或负数。

然而,即使Cueball有这种限制,它也不会真正造成问题。通过32,767只绵羊,以每秒一只绵羊的速度,Cueball已经计数超过9小时。这意味着他有极度失眠,可能需要治疗,而且他整晚都在计算,因此只是起床并开始新的一天而不是从-32,768重新计算绵羊。此外,根据牛津大学研究人员进行的一项实验,计算绵羊实际上是一种诱导睡眠的低级手段(另见维基百科文章)。

标题文字指的是1968年菲利普·K·迪克科幻小说“Do Androids Dream of Electric Sheep?”,它被改编成了可能更广为人知的雷德利·斯科特导演的1982年电影“银翼杀手”。这意味着,如果我们创造了梦想电羊的机器人,我们应该确保给它们足够的存储空间来存储足够大的数字,以便算术溢出的可能性大大降低,即使它们数量为很久。 “long int”通常由四个字节而不是两个字节组成,因此不是限制在-32,768到32,767的范围内,而是能够存储从-2,147,483,648到2,147,483,647的数字,这需要花费68。1年才能耗尽。 “sheepCount”是计算机程序中使用的变量的可能名称。声明一个变量告诉计算机它应该分配一部分内存与给定的变量名相关联。对于那些可能不熟悉常见编程实践的人来说,“sheepCount”是使用通常所说的CamelCase命名的,这意味着名称中的所有单词(“sheep”和“count”)被拼在一起并且每个单词的第一个字母第一个之后的词是大写的。这是在计算机编程中命名变量的几种常用方法之一。

Leave a Reply

Your email address will not be published. Required fields are marked *

Categories