C++ 无符号整型

17 Mar 2025 | 4 分钟阅读

只包含非负整数的数据类型是无符号整数 (unsigned int)。与 C++ 中可以同时包含正负整数的有符号整数 (signed int) 不同,无符号整数只能存储正整数,其范围通常为 0-255。因此,它可以存储 256 个不同的值,而有符号整数有一半的值是负数。当需要使用正整数时,C++ 无符号整数是最佳选择,因为它与网络和系统兼容,可以为网络和系统处理内存优化。

C++ 无符号整数的语法

C++ 无符号整数的语法流程如下

un_int 表示稍后作为参数提供的值,unsigned 关键字后跟一个整数。同样,对于不同的数据类型,有多种声明无符号整数的方法

Unsigned 关键字后跟 short 类型 整数。

Unsigned 关键字后跟 long 类型 整数。

Unsigned 关键字后跟一个嵌套的 long 类型 整数。

无符号整数 (unsigned int) 在 C++ 中是如何工作的?

  • 在 C++ 中,unsigned int 数据类型存储 0255 之间的非负数。
  • 它用于 1 字节有符号整数,范围为 -128127,用于存储与负值兼容的值,适用于网络和内存受限的系统,因为无符号整数由正值组成,在分配和实现过程中不需要额外的内存。
  • 无符号整数不会溢出,所以如果用户尝试存储一个大于指定范围的数字,会遇到各种问题。
  • 如果分配的值超出范围,最大的整数之一会除以该值;只有余数被保留用于进一步计算。
  • 另一种方法主要需要使用模运算功能对数字进行环绕(wrap),然后获取并使用余下的值来存储。例如,如果值为 280,这完全超出了范围,它会选择范围的上限,然后对该值进行完整的环绕。
  • 无符号整数定义了特定的范围。例如,1 字节无符号整数的范围是 0-255。2 字节无符号整数的范围是 0 到 65535。4 字节无符号整数的范围是 0 到 4,294,967,295;8 字节无符号整数的范围是 0 到 18,446,744,073,709,551,657。
  • 程序员有时会混淆有符号和无符号整数。使用负号可以轻松区分两者。但是,如果没有提供符号,则必须假定该数字为正数,然后再进行估算并适当地使用这些值。
  • 一些程序员也持相反观点,认为由于无符号整数引发的两种行为和实现问题,应该减少其使用。例如,一些程序员在使用负号表示无符号数时经常需要帮助,因为这可能导致对代码库的错误假设。这是一种在减法时发生的非传统情况。
  • 另一个经常出现的问题是,当程序员引入一种混合了有符号和无符号整数的数据类型时,会促使他们在使用无符号整数时不希望或不接受输入符号。
  • 因此,在一些有趣的领域中,人们应该毫不犹豫地使用 C++ 无符号数,特别是在涉及位操作的情况下。
  • 构建具有处理器或内存受限功能的嵌入式系统,C++ 无符号整数是必不可少的。
  • 最后,对于处理数组和数组索引的程序员来说,这至关重要,其中大量无符号整数以某种方式被处理,以满足与有符号整数相比,严格使用 C++ 无符号整数的要求。

C++ 无符号整数示例

示例 1

让我们通过一个程序来说明有符号无符号数在执行期间是如何区别和处理的。

输出

Unsigned int in C++

示例 2

这个程序展示了无符号整数溢出,这表示如果以无符号整数形式提供的值大于预期值,最终将发生意外的隐式转换,将值转换为另一种形式,如输出所示。

输出

Unsigned int in C++

示例 3

这个程序展示了如何表示一个无符号整数值,正如输出所示,程序员不太喜欢这种方式,因为如果输出中抛出负数会很不方便。

输出

Unsigned int in C++

示例 4

这个程序说明了如何表示一个无符号整数,其中包装类负责对负值进行舍入而不是正值,如输出所示。

输出

Unsigned int in C++

结论

总而言之,程序员偏爱无符号数,因为它们使编写易于理解的代码和在处理位时进行优化变得更加直接。当值需要在进行数组索引实验时进行调整时,程序员和开发人员都会使用无符号整数。