gpt4 book ai didi

c - 为什么int的范围是-32768到32767?

转载 作者:太空狗 更新时间:2023-10-29 16:28:15 25 4
gpt4 key购买 nike

为什么任何数据类型的负值范围都比正值值大?

例如,如果是整数:

Turbo C 中它的范围是 -3276832767 而对于 Visual Studio 它是 -21474836482147483647

其他数据类型也是如此。

最佳答案

由于数字的存储方式。有符号数使用称为“二进制补码表示法”的东西存储。

记住所有变量都有一定数量的位。如果其中最重要的一位(左边的一位)是 0,则该数字是非负数(即正数或零),其余位仅表示值。

但是,如果最左边的位是 1,则该数为负数。数字的实际值可以通过从表示的整数(作为无符号数,包括最左边的 1)中减去 2^n 来获得,其中 n 是变量的位数。

由于数字的实际值(“尾数”)只剩下 n - 1 位,因此可能的组合为 2^(n - 1)。对于正数/零数,这很简单:它们从 0 到 2^(n - 1) - 1。-1 是为了说明零本身——例如,如果你只有四种可能的组合,这些组合将代表 0、1、2 和 3(注意有四个数字):它从 0 到 4 - 1。

对于负数,请记住最左边的位是 1,因此表示的整数介于 2^(n - 1) 和 (2^n) - 1 之间(括号在这里非常重要!)。但是,正如我所说,您必须去掉 2^n 才能获得数字的实际值。 2^(n - 1) - 2^n 是 -(2^(n - 1)),而 ((2^n) - 1) - 2^n 是 -1。因此,负数的范围是-(2^(n - 1)) 到-1。

将所有这些放在一起,您得到 -2^(n - 1) 到 2^(n - 1) - 1。如您所见,上限得到 -1 而下限没有。

这就是负数比正数多一个的原因。

关于c - 为什么int的范围是-32768到32767?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18558271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com