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

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

  • 有符号整数可以同时存储正值和负值,但在它旁边无符号整数只能存储正值。

  • 有符号整数类型的非负值范围是相应无符号整数类型的子范围。
    例如:

    • 假设整数的大小为 2 个字节。

    • 有符号整数 -32768 到 +32767

    • 无符号整数 0 到 65535

  • 在计算无符号整数时,它永远不会溢出,因为如果计算结果大于无符号整数类型的最大值,则它会以比结果类型可以表示的最大值大一的数字为模减少。
    例如:

    • 计算结果%(无符号整数的最大值+1)

    • 有符号整数类型的溢出是未定义的。

    • 如果 Data 是有符号类型的负值,Data 的右移操作是依赖于实现的,但是对于无符号类型,它会是 Data/2pos。

    • 如果 Data 是有符号类型的负值,则 Data 的左移操作显示未定义的行为,但对于无符号类型,它将是 Data x 2pos。

相关文章

在C语言中声明变量:变量声明仅在编译时向编译器提供以给定类...
全局变量和静态全局变量有不同的联系。 这就是全局变量可以在...
存储类决定程序中变量或函数的范围(生命周期)和范围(可见性)...
在C语言中,外部静态变量有内部链接,内部静态变量没有链接。...
让我们先来看一下 typedef 和宏的简短描述,以了解它们之间的...
编译器错误。 解释:typedef 已被视为部分存储类,因此不能一...