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

贾恩

为什么任何数据类型的范围在负极性都比正极性更大?

例如,对于整数:

Turbo C的它的范围是-3276832767Visual Studio的-21474836482147483647

其他数据类型也是如此...

[UPD:为Visual Studio设置适当的限制值]

aaaaaa123456789

由于数字的存储方式。带符号的数字使用“二进制补码表示法”进行存储。

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

但是,如果最左边的位为1,则数字为负。可以通过从表示的整数中减去2 ^ n(作为无符号数,包括最左边的1)来获得数字的实数值,其中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,下限为-1。

这就是为什么负数多于正数的原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么32767 + 1在Turbo C中给出-32768?

为什么我可以使用int> +32767进行操作?

在 Excel 中,为什么使用 INT 而不是 MOD 函数将值减少到一个范围?

在Kubernetes中,为什么NodePort的默认端口范围是30000-32767?

为什么在Java中字节的范围是-128到127?

为什么 java int 类型在 -2,147,483,648 到 2,147,483,647 范围内具有有效值?

字符串范围是正确的,为什么仍然得到PLS-00215:字符串长度限制必须在范围内(1 ..32767)

为什么无法从int到Long隐式转换?

了解为什么我的CAST到INT无法正常工作

为什么会出现“从“无效*”到“ int **”的无效转换错误?

为什么宏的最小值:RAND_MAX,32767

为什么在JavaScript的Date构造函数中,month参数的范围从0到11?

为什么在C ++ 11中带符号的char -127到127的范围?

为什么我可以static_cast void *到int *但不能到int *&?

从char到int的转换:为什么(int)givenString.charAt(2)给出48,且namedString =“ 11001”?

为什么Int类型2 ^ 31不会超出GHCi的范围?

无效行号(-32768)超出允许范围(0..1048575)

当显式更改int的值时,为什么对const int(绑定到int)的引用的值会更改?

为什么显式类型转换需要从double到float而不是从int到byte?

为什么Robot.delay(INT MS)限制到1分钟?

为什么从int改变numpy.array D型到浮动变化numpy.imshow的()的输出

为什么从Int到UInt的隐式类型转换不起作用?

为什么MSVC 16.7会处理涉及从long到int模糊转换的函数重载?

为什么编译器不能将const int绑定到右值引用?

从varchar到int的SQL Proc“转换失败”。为什么要转换?

“引用只能绑定到对象”,为什么是“ const int&ref = 3;” 有效的?

为什么 eval 类给我一个从 int 到 double 的转换错误?

为什么我从 str 到 list 再到 int 的转换不起作用?

JavaScript 数组改组 - 为什么随机数必须向下移动 0.5 到负范围?