易百教程

15、C中的无符号整数和有符号整数有什么区别?

有符号和无符号整数类型具有相同的存储(根据标准至少 16 位)和对齐方式,但它们仍然存在很多差异,在下面的行中,描述有符号和无符号整数之间的一些差异。

  • 有符号整数可以同时存储正值和负值,但在它旁边无符号整数只能存储正值。
  • 有符号整数类型的非负值范围是相应无符号整数类型的子范围。
    例如:

    • 假设整数的大小为 2 个字节。
    • 有符号整数 -32768 到 +32767
    • 无符号整数 0 到 65535
  • 在计算无符号整数时,它永远不会溢出,因为如果计算结果大于无符号整数类型的最大值,则它会以比结果类型可以表示的最大值大一的数字为模减少。
    例如:

    • 计算结果%(无符号整数的最大值+1)
    • 有符号整数类型的溢出是未定义的。
    • 如果 Data 是有符号类型的负值,Data 的右移操作是依赖于实现的,但是对于无符号类型,它会是 Data/2pos。
    • 如果 Data 是有符号类型的负值,则 Data 的左移操作显示未定义的行为,但对于无符号类型,它将是 Data x 2pos。