为什么2 ^ 16是“特殊”数字?[关闭]


48

好的,我问这个问题很愚蠢-但在杰夫(Jeff)的文章中:正确设置采访电话屏幕,最初是在5个基本电话屏幕问题中指出

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

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


6
是2的幂?:)
Michael K

2
@Michael 2^16.1也是2的幂,但没什么特别的。相同2^0
2011年

4
@Radek:2**0is 1,实际上是一个非常特殊的数字;)但是,是的,我们通常只关注指数为正整数的2的幂。

1
那么,为什么10 ^ 3或10 ^ 6是一个特殊数字?

4
这是90年代的面试问题吗?当时的16位很特别
克里斯·S

Answers:


81

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

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


23
仅供参考,它也是Excel电子表格中的行数:)
Travis Christian

2
那仍然是极限吗?
JeffO

6
我站得住了。也许已经有一段时间了,因为我一直向下滚动。
特拉维斯·克里斯汀

3
@Travis:最后一句有一个错误的错误;2 ^ 16需要17位。
PSU'2

2
65535也是ipv4(和ipv6?)协议中找到的最高端口号。
CoatedMoose13年

58

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

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

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

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

目前,我想说2 32是开发人员最常处理的功能。我对那些不知道2 32大约为40亿(如果签名的话,最大值约为20亿)的开发人员感到怀疑,因为这意味着他们从不费心去找出数据库中可以存储多少记录,使用32位intS代表主键,或当使用32位旧代码intS代表的ID,日期等将需要被重构为64位。1个

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

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

我不希望程序员完全知道2 14或2 18,但我可能希望他们知道2 16,因为它是一个非常常见的数字,而且足够短(65536)以方便记住完整数字。


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


22
要记住的一件好事是2 ^ 10大约是一千,从那里得到2 ^ 20是一百万,而2 ^ 30是十亿,依此类推。借助于此,可以很容易地“看出” 2 ^ 14是1600万,因此您可以快速进行二进制和十进制之间的思维转换。2 ^ 64是16 * 10 ^ 18,这是嗯... 160亿亿:)
Maglob

@Maglob,谢谢,好点。值得注意的是您是如何到达2 ^ 64的,因为这花了我一分钟时间。1000是10 ^ 3,大约是2 ^ 10。64是4和60。60/10是6,6 * 3是18,所以您得到:10 ^ 18 *(2 ^ 4或16)...
Nicole

2
嗯 我在上面做了一个错字(而且不能编辑)2 ^ 14当然是一万六千,而不是一百万。(我想毕竟“看”起来并不容易:)
Maglob

+1好的答案,因为更完整的上下文是您正在寻找能够思考的人,尤其是要了解上下文和领域的知识。
quick_now 2013年

4
嗯,ASCII码是7位。.;-)
Brendan

3

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

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

在说出这是否是一项重要的知识之前,我需要了解该问题的更多背景信息。


我发誓我一定过滤掉了你写的大部分内容。我只看到2 ^ 16和最高整数。
2011年

6
这是不准确的。在16位操作系统中,完全有可能具有32位(或更高)数据类型。16位整数只是可以存储在16位处理器上的单个寄存器中的最大值。
2011年

@Chinmay点;)
ChrisF
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.