假设如下:
unsigned char foo = 3;
unsigned char bar = 5;
unsigned int shmoo = foo + bar;
是否保证foo
和bar
值被提升为int
用于评估表达式的值foo + bar
- 或者是否允许实现将它们提升为unsigned int
?
在第 6.2.5 节第 8 段中:
对于任何两个具有相同符号和不同整数转换等级的整数类型(见 6.3.1.1),具有较小整数转换等级的类型的值范围是另一个类型的值的子范围。
在第 6.2.5 节第 9 段中:
如果 an
int
可以表示原始类型的所有值,则将该值转换为int
; 否则,将其转换为unsigned int
.
具有较小整数转换等级的整数类型的值范围是其他类型值的子范围的保证似乎取决于整数类型的符号性。
signed char
对应于signed int
unsigned char
对应于unsigned int
这是否意味着 an 的值unsigned char
只保证在 的子范围内unsigned int
,而不一定在 的子范围内int
?如果是这样,这是否意味着一个实现理论上可能具有一个unsigned char
不在 a 子范围内的值int
?