65535
定义
65535是一个正整数,位于65534和65536之间,属于奇数[1]。在n位无符号二进制整数中,数值范围是0到$2^n-1$,把n取16即得0到65535,因此65535就是16位无符号整数可以表示的最大值[2]。
把65535写成二进制是1111111111111111,即连续的16个1;写成十六进制是FFFF,习惯写作0xFFFF[1]。由于它恰好比$2^{16}=65536$小1,在按1024为单位的计数体系里,65536对应64K,65535因此常被视作“64K减一”这一边界值[1]。
这一数值与同宽度的有符号整数形成对照。16位有符号整数采用补码表示时范围为-32768至32767,需要让出最高位作为符号位,能表示的正数上限因此减半[2]。在补码规则下,16个1的位图样同时也被解释为有符号数中的-1[4]。
原理
16位整数由两个字节构成,每个字节8位,共16个二进制位,可区分$2^{16}=65536$种不同的位组合,这些组合依次对应0到65535[5]。无符号类型的全部位都参与计数,最低位权重为$2^0$,最高位权重为$2^{15}$;当所有位都为1时总和为$\sum_{i=0}^{15}2^i = 2^{16}-1 = 65535$,这正是最大值出现的原因[6]。
表示能力有限的直接后果是溢出。当无符号运算的结果超过65535时,结果会对$2^{16}$取模,只保留低16位,表现为数值“绕回”到0附近[5]。同一段位图样在不同解释方式下含义不同:16个1作为无符号数读出65535,作为16位有符号数读出-1,这也是把-1赋值给16位无符号类型时会得到65535的原因[7]。
flowchart LR
A[16 个二进制位] --> B{最高位是否作符号位}
B -->|否 无符号| C[范围 0 ~ 65535]
B -->|是 补码| D[范围 -32768 ~ 32767]
C --> E[位全为 1 时取最大值 65535]
在编程语言与标准库里,65535以常量的形式出现。C 语言的实现文档把unsigned short型的位宽列为16位、取值范围列为0到65535[8]。部分数值计算库则直接提供名为UINT16_MAX的常量,其值即$2^{16}-1$,对应位序列1111111111111111[6]。
发展历程
65535的特殊地位源于16位字长在计算设备中的普遍使用。早期处理器与操作系统大量采用16位架构,指令字长与内存地址都以16位为单位,可寻址的最大地址随之落在65535附近,两字节无符号整数的上限也因此成为常被引用的门槛[9]。
即使在处理器字长扩展到32位、64位之后,16位字段仍被保留在协议与文件格式中。整数溢出条目按位宽列举了常见无符号整数的上限:8位为255,16位为65535,32位为4294967295,64位为18446744073709551615,这一序列说明65535是二进制位宽系列中的一个固定节点[5]。
由于位宽不变,与65535有关的边界长期沿用。网络传输层的端口号始终以16位字段编码,取值范围保持为0至65535;图形文件规范中的部分曝光参数也以16位无符号整数存储,超过上限的取值无法直接写入该字段[10]。
应用
网络端口编号是65535最广为人知的应用场景。TCP与UDP报文头中的源端口和目的端口各为16位,因此端口号范围为0至65535;TCP的0号端口被保留不可使用,UDP的源端口可选,填0表示没有源端口[10]。这些编号按用途划分为熟知端口0至1023、注册端口1024至49151、动态或私有端口49152至65535[11]。
在嵌入式与底层硬件中,65535常作为计数上限出现。16位定时器的预分频与自动重装寄存器取值到65535为止,设计参数时需要以此为上限约束[1]。以字节为单位计算时,65535字节约合64KB,这一范围与16位地址总线可寻址的空间相对应[1]。
在数据存储与图像元数据中,16位无符号整数是常见字段类型。数码相机记录感光度时使用16位无符号整数字段,当实际值高于该字段能容纳的上限时,字段被写入65535,真实数值另存于扩展信息中。在表格软件中,早期版本的工作表行数上限也与这一数值相关[12]。
局限
65535的表示能力由其位宽决定,无法超越。任何需要记录大于65535的整数场景都不能直接使用单个16位无符号字段,否则只能截断或退化表示;例如曝光参数超出范围时,字段只能写入上限值,精确值必须转移到其他字段。
溢出不会自动报错。无符号整数运算超出上限时按$2^{16}$取模绕回,硬件通常不发出提示,需要程序自行检查边界,否则结果会以意料之外的小数值出现[13][5]。若溢出的数值被当作缓冲区长度使用,分配到的空间可能小于预期,进而引发缓冲区越界等安全问题[5]。
可用的端口数量也受这一字段宽度限制。16位端口号总共只有65536个可能取值,其中0号端口在TCP中保留不用,脚本中即便写0号端口,实际含义也往往是让系统分配一个空闲端口,而非真正占用该编号[14][15]。此外,同一编号的TCP端口与UDP端口分属不同命名空间,需要分别统计与放行[14]。
参见
参考资料
- 65534与65536之间的自然数 [引用日期2026-10-29]
- [科普中国]-无符号整数 [引用日期2026-10-29]
- Integers(G.3.5) [引用日期2026-10-29]
- Numeric Ranges [引用日期2026-10-29]
- 整数溢出 - 此条目可参照英语维基百科相应条目来扩充 [引用日期2026-10-29]
- @stdlib/constants-uint16-max [引用日期2026-10-29]
- 问关于"C:参考手册“一书中的整数常量EN [引用日期2026-10-29]
- E.1.5 整数 (G.3.5) [引用日期2026-10-29]
- Revision 4a6c0652-2b12-4b1b-9b9a-3640b505b503 [引用日期2026-10-29]
- Port (computer networking) [引用日期2026-10-29]
- Port (computer networking) [引用日期2026-10-29]
- 夸克百科 [引用日期2026-10-29]
- [科普中国]-unsigned int [引用日期2026-10-29]
- IP 連接埠範圍是多少:0–65535 的三段劃分與常用連接埠 [引用日期2026-10-29]
- 网络编程(六):端口那些事儿 [引用日期2026-10-29]