C 中以位表示的 int 和 unsigned-int 值表示有什么区别
What's the difference between int and unsigned-int value representations in bits in C
我通过实验注意到,在 unsigned int
中,数字的值以 32 位表示,即使该数字采用 1 位 space,其余位将采用 0 作为一个值。而在 int
中,值被放入所需的位中,只为符号添加了 1 位。有人可以向我解释那是什么吗?
机器使用固定长度的数字表示(至少是普通机器)。假设你的机器是 32 位的,这意味着它使用 32 位的数字和它们的算法。
通常你有无符号表示,可以表示从 0 到 2^32-1 的数字(但 每个 数字使用 32 位)和 2 的补码 32 位表示从 -2^31 到 2^31-1 的数字(这种表示使用最高有效位作为符号)。但是无论编码是什么,一个数字总是使用相同数量的位数,无论它的值是多少。
答案非常依赖于语言,在某些语言(如 C++)中,答案取决于目标 CPU 体系结构。
许多语言都将 int 和 unsigned int 存储在 space 的 32 位中。
"BigInt" 许多语言都支持未知大小的数字。根据存储的数字的要求,它们的行为与您描述的扩展位置非常相似。
某些语言,例如 ruby 会根据数学运算的需要自动在两者之间进行转换。
i noticed by experiment that in unsigned int
the value of a number is represented in 32 bit even if the number is taking 1-bit space, the rest of the bits would take 0 as a value. while in int
, the value is being put in the bits needed with just 1 more bit added for the sign. can someone please explain to me what's that?
当然可以。你错了。
C 标准规定,作为相应的无符号和有符号整数类型,unsigned int
和(有符号)int
需要相同的存储量 (C2011 6.2.5/6)。该标准没有指定这些类型的确切大小,但 32 位是一个常见的选择。如果 unsigned int
的表示在给定的 C 实现中占用 32 位,那么该实现的 int
.
的表示也是如此
此外,尽管 C 允许从 3 种负值表示形式中进行选择,但定义了有符号和无符号整数表示之间的对应关系,以便 值位 在int
的表示——那些既不是 填充位 也不是 符号位 的表示 - 表示与相应无符号整数类型 (C2011, 6.2.6.2/2) 相同位置的位。因此,可以将具有非负值的有符号整数的表示重新解释为相应的无符号整数类型,而无需更改其数值。
我通过实验注意到,在 unsigned int
中,数字的值以 32 位表示,即使该数字采用 1 位 space,其余位将采用 0 作为一个值。而在 int
中,值被放入所需的位中,只为符号添加了 1 位。有人可以向我解释那是什么吗?
机器使用固定长度的数字表示(至少是普通机器)。假设你的机器是 32 位的,这意味着它使用 32 位的数字和它们的算法。
通常你有无符号表示,可以表示从 0 到 2^32-1 的数字(但 每个 数字使用 32 位)和 2 的补码 32 位表示从 -2^31 到 2^31-1 的数字(这种表示使用最高有效位作为符号)。但是无论编码是什么,一个数字总是使用相同数量的位数,无论它的值是多少。
答案非常依赖于语言,在某些语言(如 C++)中,答案取决于目标 CPU 体系结构。
许多语言都将 int 和 unsigned int 存储在 space 的 32 位中。
"BigInt" 许多语言都支持未知大小的数字。根据存储的数字的要求,它们的行为与您描述的扩展位置非常相似。
某些语言,例如 ruby 会根据数学运算的需要自动在两者之间进行转换。
i noticed by experiment that in
unsigned int
the value of a number is represented in 32 bit even if the number is taking 1-bit space, the rest of the bits would take 0 as a value. while inint
, the value is being put in the bits needed with just 1 more bit added for the sign. can someone please explain to me what's that?
当然可以。你错了。
C 标准规定,作为相应的无符号和有符号整数类型,unsigned int
和(有符号)int
需要相同的存储量 (C2011 6.2.5/6)。该标准没有指定这些类型的确切大小,但 32 位是一个常见的选择。如果 unsigned int
的表示在给定的 C 实现中占用 32 位,那么该实现的 int
.
此外,尽管 C 允许从 3 种负值表示形式中进行选择,但定义了有符号和无符号整数表示之间的对应关系,以便 值位 在int
的表示——那些既不是 填充位 也不是 符号位 的表示 - 表示与相应无符号整数类型 (C2011, 6.2.6.2/2) 相同位置的位。因此,可以将具有非负值的有符号整数的表示重新解释为相应的无符号整数类型,而无需更改其数值。