C中的int和unsigned-int值表示之间的区别是什么

时间:2016-12-08 19:08:44

标签: c int unsigned-integer

我通过实验注意到,在unsigned int中,即使数字占用1位空间,数字的值也以32位表示,其余位将取0作为值。在int中,将值放入所需的位中,只需为符号添加1位。有人可以向我解释那是什么意思吗?

3 个答案:

答案 0 :(得分:2)

  

我通过实验注意到,在unsigned int中,即使数字占用1位空间,数字的值也以32位表示,其余位将取0作为值。在int中,将值放入所需的位中,只需为符号添加1位。有人可以向我解释那是什么意思吗?

不确定。你错了。

C标准指定,作为相应的无符号和有符号整数类型,unsigned int和(带符号)int需要相同的存储量(C2011 6.2.5 / 6)。该标准没有规定这些类型的确切大小,但32位是常见的选择。如果unsigned int的表示在给定的C实现中占用32位,那么该实现的表示也是int

此外,虽然C允许从3种替代样式的负值表示中进行选择,但是定义了有符号和无符号整数表示之间的对应关系,以便在{{的表示中使用值位 1}} - 既不是填充位也不是符号位的那些 - 表示与相应无符号整数类型的相同位置中的位相同的位值(C2011,6.2.6.2/2)。因此,具有非负值的有符号整数的表示可以重新解释为相应的无符号整数类型,而不会更改其数值。

答案 1 :(得分:0)

机器使用固定长度表示数字(至少是普通机器)。假设您的机器是32位,这意味着它使用32位数字及其算术。

通常你有无符号表示,可以表示0到2 ^ 32-1之间的数字(但每个数字使用32位)和2' s补码32位表示数字从-2 ^ 31到2 ^ 31-1(这种表示使用符号的最高位)。但无论编码是什么,数字总是使用相同的位数,无论其值如何。

答案 2 :(得分:-1)

答案非常依赖于语言,在某些语言(如C ++)中,答案取决于目标CPU架构。

许多语言在32位空间中存储int和unsigned int。

" BigInt有"支持许多语言中存在未知大小的数字。根据所存储数量的要求,其行为与描述它们扩展的位置非常相似。

某些语言,如ruby会自动在两者之间进行转换,作为数学运算的需求。