首页 > 解决方案 > unsigned int vs signed int 存储值的相关性

问题描述

就存储而言,做unsigned int 并 具有任何相关性。signed int我知道它在打印声明中具有相关性,即;-1 将被视为4294967295(%d%u) 。如果我们只考虑 value 的存储,是否unsignedsigned有所不同?

标签: ctypesunsigned-integer

解决方案


在 C 中,你不能有没有类型的值。(各种操作是根据数学值定义的,但每个操作都被指定为产生特定类型的结果,因此,在 C 表达式中每个有值的点,它都有一个类型。)所以任何值都是通过存储表示它的对象的字节来存储。

C 2018 标准在 6.2.6 中指定了类型的表示,并且在 6.2.6.2 中特别指定了整数类型的表示。对象由一位或多位组成。无符号整数用纯二进制加上可选的填充位表示。未指定位的顺序。对于有符号整数类型,其中一位是符号位,每个值位与对应的无符号类型的同一位具有相同的值。无符号类型中的一些值位可能是有符号类型中的填充位(未用于值)。(但总位数相同,根据 6.2.5 6。)符号位表示该值是否定或表示值 -(2 M ) 或 -(2 M -1),其中M是值位数。(这三个中的哪一个是实现定义的。)

因此,整数类型是有符号还是无符号对于公共值位的解释没有区别。它仅影响对无符号类型中的值位但有符号类型中的符号位或填充位的位的解释。(后者很少见。)

如果有符号整数类型中的值与其对应的无符号整数类型中的值相同,则它们的每个公共值位中的值相同,并且所有未共享的符号或值位中的值为零。(填充位未在 C 标准中指定。)


推荐阅读