C - 存储值时的无符号 int 与有符号 int 的相关性



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

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

C 2018 标准指定了 6.2.6 中类型的表示形式和 6.2.6.2 中整数类型的表示形式。对象由一个或多个位组成。无符号整数用纯二进制和可选的填充位表示。未指定位的顺序。对于有符号整数类型,其中一个位是符号位,每个值位的值与相应无符号类型的相同位具有相同的值。无符号类型中的某些值位可能是有符号类型中的填充位(未用于值)。(但总位数是相同的,每 6.2.5 6。符号位表示值为负,或者表示值 −(2M) 或 −(2M−1),其中M是值位数。(这三者中哪一个是实现定义的。

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

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

相关内容

最新更新