最常见的电话号码

作者: 阮一峰

日期: 2011年2月10日

网上有许多电话号码,你知道最常见的是哪个?

有个老外找到了答案,这个号码就是2147483647。

事情是这样的,我们知道,在计算机中,整数往往用4个字节保存。4个字节就是32位,由于最高位是符号位,那么只剩下31位,也就是说,这种方式所能保存的最大整数是2的31次方-1(因为要去掉零),即2147483647。

这个老外突然意识到,这是一个10位数,与美国电话号码的位数相同。于是,他就很好奇,214-748-3647会是谁的号码呢?

214是美国达拉斯市的区号,但是搜索后发现,超过1500个网站上有这个号码,遍布全美各地。

为什么会这样?

很显然,大量程序员考虑不周,使用4个字节的整数保存电话号码。当用户输入的号码大于2147483647时,就会自动转成这个数字。因此,它就成了网上最常见的电话号码。

===================================

我一时兴起,想看看国内有没有人犯这个错误。事实证明,真的是有一大把

因为我国的长途区号没有0214,所以这个号码只能是在上海(区号021)。一想到他会接到各种各样的来电,要求提供租车服务、租房服务、美容服务、餐饮服务、耐磨材料等等,我就对021-47483647的主人充满同情。

(完)

珠峰培训

stuQ

留言(34条)

haha, this is funny.

不是程序员不明白吧。

那个号码真的存在吗?
汗一个~

这篇很漂亮~~ :)

确实,第一眼就发现是这数= =(程序猿无鸭梨滚过

第一张配图是有人修改游戏的结果吧?

可憐的程序員,這個和千年蟲如出一轍

不用同情,这个电话是打不通的,上海没有这个电话段的号码

上海电话没有以4开头的一般是以5和6开头,所以对不起,您所拨打的电话是空号。

宋丹丹说,“囧死我了”。。

引用61的发言:

上海电话没有以4开头的一般是以5和6开头,所以对不起,您所拨打的电话是空号。

上海有4开头的号码的。

这个问题(文章)很有趣

搜索结果不到20条,也能叫“一大把”?

2147483647 使用google得到140,000,000条结果
21 47483647 使用google得到11,200条结果
021 47483647 使用google得到61条结果
214-748-3647 使用google得到25,200 条结果
当然这些结果是从http://www.google.com.hk上得到的。
使用百度的话结果当然会少很多。

那我有一个疑问。就像TXT里面数字都是一个个独立的字符来存储的
为什么不以整数来存储?

然后是游戏存档里的数值也是按整数来存储还是按TXT的方式呢?

似乎是胡说八道呢!

如果是用带符号整数保存,那么当用户输入的号码大于2147483647时,就会是负数!
如果是用无符号整数保存,那么最大值是42,9496,7295(2……32-1)。

道理是讲清楚了,
但是我还是不够明白。可能是外行的缘故。
最重要的是,
如果我有类似的需要时,
怎么操作,才能得到有效的结果呢?
换句话说,
我如何避免这个错误及其带来的麻烦?

一峰兄:
我如果有这种操作的需要,
该怎么避免类似错误和
可能的麻烦呢?

能否在Blog页面加上一个返回主页的链接?有时从Google搜索点进Blog后又想看看Tweets和What I read,如果能加一个链接的话可以方便很多。

引用游客的发言:

似乎是胡说八道呢!

如果是用带符号整数保存,那么当用户输入的号码大于2147483647时,就会是负数!
如果是用无符号整数保存,那么最大值是42,9496,7295(2……32-1)。



看来这个电话号码是java程序员的杰作

拨打了下,这个号码应该不存在...

我想中国的程序员不会用一个整形来处理一个电话号码,不然区号大点的区号就无法处理了

我用bigint,存手机号码就会发现int不够用

引用wadefelix的发言:
看来这个电话号码是java程序员的杰作

Java中不存在有无符号一说,所以都看作是有符号的

这篇文章不仅有趣,更反映了阮兄睿智的大脑和深刻的洞察力。该去炒股票啊!

“当用户输入的号码大于2147483647时,就会自动转成这个数字。” 感觉这句话里面的“自动转成”其实蛮有意思的,什么系统会在整数溢出的时候将非符号位“自动转成”全1的值呢?百思不得其解,可惜此处一笔带过了

你拨打的电话是空号!呵呵,这号码没人敢用啊。

我拿这号去买七星彩,中了500万大奖的话分软哥10万...

2,147,483,647(二十一亿四千七百四十八万三千六百四十七)是2147483646与2147483648之间的自然数,也是欧拉在1772年所发现的一个梅森素数,它等于231-1,是32位元操作系统中最大的符号型整型常量,例如在Pascal语言中长整型的范围是-2147483648~2147483647。

它是4个已知的双重梅森素数的其中一个。

最后一句话,够闷骚。

这个值就拿来做边界值了

引用macafee的发言:

上海有4开头的号码的。

有吗?上海住了那么多年,从来没见过4开头的号码

刚拔了,空号!

我以为是110

this condition happened in some database,MySQL for example.

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接