首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C类型的取值范围

C类型的取值范围
EN

Stack Overflow用户
提问于 2014-04-24 08:43:37
回答 1查看 278关注 0票数 3

在C标准中,编写了这样的代码,即int应该有:

  • min -32767最大32767

但在实现中,即在16位机器上,值为:

  • min -32768最大32767

为什么负价值会有这种差异?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-24 09:01:56

这两个范围都是有效的,不寻常的是第一个-32767.32767,但按照C标准它是完全正确的。

在许多实现中,短整数的最小值是-(2^15 - 1),然后是-32768。您将看到它被定义为:

代码语言:javascript
运行
复制
#define SHRT_MIN 0x7FFF
#define SHRT_MIN (-32767 - 1)
#define SHRT_MIN (-32768)

标准断言它必须是(-2^15 + 1) (然后是-32767) 或更少的(因为实际值取决于特定的系统和库实现)。因为大多数实现使用两个的补码来表示负数(当整数零没有符号时,),那么最小负值就少了一个单位。在实践中,这意味着您可以确保在编写程序时(无论是编译器还是平台),至少可以将-32767存储在short中(但对于某些编译器/平台而言,您在编译器中看到的范围可能更广)。

请注意,在本例中,-32768是有意义的(对于sizeof(int) > sizeof(short)所在的平台),与MIN_INT不同,因为文字值实际上是int (而不是short)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23263978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档