首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于"C:参考手册“一书中的整数常量

关于"C:参考手册“一书中的整数常量
EN

Stack Overflow用户
提问于 2015-01-26 02:15:12
回答 1查看 84关注 0票数 2

在第2.7.1节中,它指出:

为了说明整数常量的一些微妙之处,假设int类型使用16位的二补表示,类型long使用32位的二补表示,而类型long使用64位的二补表示。我们在表2-6中列出了一些有趣的整数常量. 从本表中值得注意的一点是,在2^15到2^16 -1范围内的整数在写入为十进制常量时将具有正值,而当写入为八进制或十六进制常量时将具有负值(并转换为int类型)。

但是,据我所知,在2^15 - 2^16-1范围内,以十六进制/八进制常量书写的整数在转换为unsigned类型时也具有正值。这本书错了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-26 02:43:04

在所描述的设置中,范围为32768,65535的十进制文字具有long int类型,而该范围内的十六进制文本具有unsigned int类型。

因此,常量0xFFFF是值为65535的unsigned int,而常量65535是值为65535的签名long int

我想你的短信是在讨论这些案件:

代码语言:javascript
复制
(int)0xFFFF
(int)65535

现在,由于int不能表示值65535,这两者都会导致超出范围的转换,这是实现定义的(或者可能引发实现定义的信号)。

最常见的(事实上,我听说过的所有2的补码系统),它将在这两种情况下使用截断和重新解释的组合,给出-1的值。

所以你引用的最后一段有点奇怪。655350xFFFF都是大正数;(int)0xFFFF(int)65535 (很可能)都是负数;但是如果你投出一个,而不是另一个,那么你就会得到一个不一致的结果,这并不奇怪。

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

https://stackoverflow.com/questions/28143918

复制
相关文章

相似问题

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