说我做了以下事情:
char x;
x = x + 077;
在这种情况下,即使表达式分配给char,常量077的默认类型为int吗?从读取K& R我推断出+运算符的优先级高于=,而077(八进制)的默认类型为int,因此x的值被提升为int。然后执行加法运算,然后将答案转换回char并分配给x。这是对的吗?
以下两个表达式是否会发生相同的行为?:
x += 077
x += 1
此外,如果在表达式中使用以下内容会发生什么:
(char) 14
默认情况下,第一个是第一个int,然后减少为一个char,或者它是一个以字符开头的字符吗?
char x;
x = 14;
另外,在这种情况下,首先是14,然后将其缩减为char,或者它是以char开头的?
答案 0 :(得分:2)
14
,1
和077
是整数文字,它们始终是int
或更大的类型,绝不是char
。该类型不依赖于上下文。 (有关实际类型的详细信息,请参阅C99§6.4.4.1。)
复合作业a += b
的行为与对应的a = a + b
表达式完全相同,只是a
只评估过一次:
(C99§6.5.16.2/ 3)
E1 op = E2
形式的复合赋值与简单赋值表达式E1 = E1 op (E2)
的区别仅在于左值E1
仅被计算一次。< / p>