我从C Primer Plus,第6版,第3章中的评论问题中看到了这一点。
问题是:
附录A中的答复:
注意,我的答案是int
常量,十六进制格式,但答案是unsigned int
我想知道为什么
发布于 2016-11-18 12:55:46
那本书不正确。根据C11 6.4.4.1,十六进制的整数常数类型是从这个表中确定的:
Suffix ... Octal or Hexadecimal Constant
None ... int
unsigned int
long int
unsigned long int
long long int
unsigned long long int
u or U ... unsigned int
unsigned long int
unsigned long long int
您的常量0xAA
没有后缀,所以上表的顶部是应用程序。意思:编译器将首先检查该值是否适合于int
。如果它不合适,它将检查它是否适合一个unsigned int
等等。
在任何已知的C实现上,值0xAA
肯定都适合于int
。这个问题的正确答案是int
。
然而,如果常数为0xAAu
,则引用表的底部部分将适用,其结果将是一个unsigned int
。
https://stackoverflow.com/questions/40677072
复制相似问题