gpt4 book ai didi

C 编译器使用常量的默认行为

转载 作者:太空宇宙 更新时间:2023-11-04 02:52:47 25 4
gpt4 key购买 nike

假设我做了以下事情:

char x;

x = x + 077;

在这种情况下,常量 077 是否具有默认类型 int,即使表达式正在分配给 char?通过阅读 K&R,我推断 + 运算符的优先级高于 =,并且 077(八进制)的默认类型为 int,因此 x 的值被提升为 int。然后执行加法运算,然后将答案转换回 char 并赋值给 x。这是正确的吗?

以下两个表达式是否会发生相同的行为?

x += 077
x += 1

此外,如果在表达式中使用以下内容会发生什么情况:

(char) 14

默认情况下,14 是先是 int 然后缩减为 char,还是以 char 开头?

char x;

x = 14;

此外,在这种情况下,14 首先是一个 int,然后将其简化为一个 char,还是以 char 开头?

最佳答案

141077 是整型文字,它们总是 int 或一些更大的类型,绝不是 char。该类型不依赖于上下文。 (有关实际类型的详细信息,请参阅 C99 §6.4.4.1。)

复合赋值 a += b 的行为与相应的 a = a + b 表达式完全相同,除了 a 只计算一次:

(C99 §6.5.16.2/3) A compound assignment of the form E1 op = E2 differs from the simple assignment expression E1 = E1 op (E2) only in that the lvalue E1 is evaluated only once.

关于C 编译器使用常量的默认行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20439610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com