这个问题可能是非常基本的,但是我只在经过谷歌搜索几天之后才发布在这里,并且出于对C中有符号整数的正确基本理解。

实际上有人说带符号的整数有范围


-32767至32767,其他人则表示它具有范围
-32768至32767


让我们有一个int a = 5(带符号/让我们考虑仅1个字节)

* a = 5的第一个表示形式表示为00000101,为正数,a = -5表示形式表示为10000101(因此,范围为-32767到32767是对的)
(这里的msb /符号位是1/0,数字将为正/负,其余(幅值位)不变)

* a = 5的第二个表示形式表示为00000101为正数,a = -5的第二表示形式表示为11111011
(MSB被认为是-128,其余的位被处理为获得-5)(因此,范围在-32768到32767之间)

所以我混淆了这两件事。我的疑问是在c,1)或2)中有符号的int的实际范围是多少?

最佳答案

这取决于您的环境,并且int通常可以存储-2147483648至2147483647(如果它是32位长并且使用了二进制补码),但是C规范指出int可以存储至少-32767至32767。

引自N1256 5.2.4.2.1整数类型的大小


  其实现定义的值的大小(绝对值)应等于或大于所示的相同符号。
  
  — int类型的对象的最小值
  INT_MIN -32767 //-(2 15-1)
  — int类型的对象的最大值
  INT_MAX +32767 // 2 15 − 1`

关于c - 签名的int范围困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35725455/

10-11 21:27