无符号整数

关注
义项:计算机数据类型
无符号整数

无符号整数是计算机中一类只能表示非负整数的数据类型,其全部二进制位都用于表示数值大小,不保留符号位。与带符号整数相比,同样位数的无符号整数可表示的正数上限更大,但无法表示负数。它常用于表示内存地址、数组索引、计数器、哈希值等不会为负的量,在 C、C++、C# 等语言中以 unsigned 关键字声明,在 Java 等语言中则不被直接支持。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

无符号整数是一类只能表示 0 和正整数的整数数据类型,其二进制表示中的每一位都参与表示数值大小,不划出专门的符号位[1]。带符号整数则把最高位当作符号位使用,因而可以表示负数,但可表示的正数上限相应减半[1]。

无符号整数的取值范围从 0 开始,到该类型位宽对应的最大值为止。以位宽 $w$ 为例,最大值等于 $2^w-1$:8 位取值为 0 至 255,16 位为 0 至 65535,32 位为 0 至 4294967295,64 位为 0 至 18446744073709551615[2]。同一位宽下,无符号类型可表示的最大值约为带符号类型最大值的两倍再加一[2]。

原理

无符号整数的位模式与数值之间是双射关系,每个位模式唯一对应一个非负整数,每个可表示的非负整数也唯一对应一个位模式[3]。其解码方式可写成求和式:$B2U(X)=\sum_{i=0}^{w-1} x_i \cdot 2^i$,其中 $w$ 为位宽,$x_i$ 为第 $i$ 位的取值[3]。由于没有符号位,无符号整数与带符号整数在非负范围内的位模式完全一致,区别只在最高位的解释[4]。

无符号整数的算术按模运算进行。C 语言标准规定,涉及无符号操作数的计算不会产生溢出,当结果无法用该无符号类型表示时,以该类型可表示的最大值加 1 为模取余[5]。这种性质称为回绕,即最大值加 1 得到 0,最小值减 1 得到该类型的最大值[6]。参与回绕的运算包括加法、减法、乘法、自增自减、复合赋值以及左移等[6]。

发展历程

无符号整数伴随高级编程语言的整型体系出现。C 语言在整型声明中引入 unsigned 修饰符,可加在 int、short int、long int 等基本整型之前以指定无符号数,若不加 signed 也不加 unsigned 则默认按有符号处理[1]。C99 标准第 6.2.5 节第 9 段正式确立了无符号运算取模的规则,使回绕成为语言层面定义明确的行为[5]。

后续语言对无符号整数的处理并不一致。C# 将 uint 作为关键字,表示 32 位无符号整数[7]。Java 在设计上不提供无符号整型,唯一的无符号基元类型是 16 位的 char,需要处理无符号数据时通常改用更大位宽的有符号类型并配合掩码运算[8]。

应用

无符号整数适合表示天然不可能为负的量,例如内存地址、数组下标、对象长度以及循环计数器[1]。设备寄存器、协议字段等按位定义的数据也常用无符号型来存放,以便直接进行位运算[9]。

在数据结构与算法中,无符号整数被广泛用于哈希计算。哈希函数常以 uint32_t 或 unsigned long 作为中间与结果类型,以保证按位运算和移位在满位宽下工作,避免符号扩展带来的干扰[10]。此外,无符号运算的取模特性可用于实现多精度算术和模运算[11]。

局限

无符号整数无法表示负数,任何小于 0 的结果都会回绕成一个很大的正数。当无符号左移触发回绕、或变量被用于表示指针偏移、数组索引、对象长度和内存分配参数时,回绕可能造成缓冲区越界等后果[5]。回绕发生时系统通常不给出提示,需要程序自行判断和处理。

无符号与带符号类型混用容易引发意料之外的结果。当一个表达式中同时出现有符号和无符号操作数时,有符号操作数会被隐式转换为无符号类型,取值为负时这种转换会得到极大值;例如在 32 位系统中,一个有符号的 -1 与无符号数参与运算会得到 4294967295。使用无符号类型还可能让编译器生成效率略低的代码,且容易出错,因此通常只在确有必要扩大表示范围或进行模运算时采用[11]。

参见

  • 带符号整数 —— 以符号位区分正负的整数类型,与无符号整数位宽相同但表示范围不同。

  • 补码 —— 计算机中表示带符号整数的常用编码方式,与无符号编码在非负范围内位模式一致。

  • 整数溢出 —— 整数运算结果超出类型表示范围的现象,无符号类型以回绕方式处理。

  • 位运算 —— 直接对二进制位进行的运算,常用无符号整数作为操作数。

  • 哈希函数 —— 把数据映射为定长值的函数,常以无符号整数存储计算结果。

  • 数据类型 —— 编程语言中规定数据取值范围与操作的分类,无符号整数是其中一种。

参考资料

  1. [科普中国]-无符号整数 [引用日期2026-10-14]
  2. 15-740 [引用日期2026-10-14]
  3. | ~0+1 | 0 | 00 00 | 00000000 00000000 | [引用日期2026-10-14]
  4. Integer-Representations [引用日期2026-10-14]
  5. INT30-C. 符号無し整数の演算結果がラップアラウンドしないようにする [引用日期2026-10-14]
  6. 【缺陷周话】第20期:无符号整数回绕 [引用日期2026-10-14]
  7. [科普中国]-UINT [引用日期2026-10-14]
  8. diffpagesbyversion [引用日期2026-10-14]
  9. Unsigned Integer [引用日期2026-10-14]
  10. sourceforge.net 上的网页 [引用日期2026-10-14]
  11. | 0101 | 5 | 5 | [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T21:51:00Z

历史版本

本条目引用的词条
带符号整数 补码 整数溢出 位运算 哈希函数 数据类型