it-swarm.cn

为什么2 ^ 16是“特殊”数字?

好的,我问这个很愚蠢-但是在Jeff的文章中: 正确设置采访电话屏幕 ,最初是在 5个电话屏幕必不可少的问题 中指出的:

当您要求2 ^ 16是时,他们不应该茫然地盯着您。这是一个特殊的数字。他们应该知道。

我从事开发人员,软件工程师,代码猴子等工作已有一段时间了,而且我认为我从未遇到过。我的意思是,我当然可以算出二进制值对其进行基本操作等,但我看不到该值的“特殊之处”。

49
javamonkey79

(216 -1)或65535或0xFFFF或“ 64k”是2个字节的最大值。长期以来,CPU使用 16位体系结构 ,而OS同样基于16位操作和 “ words” 。有16位命令和16位内存地址。许多系统/编译器仍将16位用于整数。

所以,(216 -1)之所以特殊是因为它是16位(无符号)整数可以容纳的最大数字,也是16位体系结构可以访问的最大内存地址。

82
Travis Christian

从史蒂夫·耶格(Steve Yegge)的文章的全文来看,

候选人应该知道什么是位和字节。它们应该能够以二进制进行计数;例如他们应该能够以十进制告诉您2 ^ 5或2 ^ 10是什么。当您要求2 ^ 16是时,他们不应该茫然地盯着您。这是一个特殊的数字。他们应该知道。

我不喜欢你在问题中引用的那句话;听起来候选人应该能够描述它的重要性,但是在上下文中,他说候选人应该从头顶上知道2的十进制转换16 是。

这样做的意义在于,由于我们人类仍然使用小数进行计数,尤其是在大多数情况下(在大多数情况下,在我们的头脑中),我们需要知道通用字节块的粗略容量我们用于存储,内存,甚至字符编码。由于字节是8位,因此最常见的是8、16、24、32和64。

目前我会说232 是开发人员最常处理的功能。我怀疑那些不知道2的开发人员32 大约为40亿(如果签名,则最大值为〜20亿),因为这意味着他们从未费心寻找可以在其数据库中使用32位ints作为主键的大致存储记录,或者将32位ints用于ID,日期等的旧代码需要重构为64位。1个

216 是Java short。的总容量。(-2之间的总数15 和215-1)

开发人员应该完全知道8位是什么。在许多常用用法中,ASCII字符编码。

我不希望程序员知道214 或218岁 完全没有,但我可能希望他们知道216 因为它是一个非常常见的数字,并且数字足够短(65536)以方便记住完整数字。


1:如果您浏览《使命召唤:MW2》或iPhone Game Center的排行榜,您经常会在顶部看到作弊者,其高分值为2,147,483,647,即231-1,有符号2的最大值32 整数。

58
Nicole

我能看到的关于2的唯一原因16 之所以称为“特殊”,是因为它比您可以在16位操作系统上的单个寄存器中存储的最大整数大一倍。

同样,您可以将相同的逻辑应用于232 和32位操作系统。

在说出这是否是一项重要的知识之前,我需要知道该问题的更多上下文。

3
ChrisF