以下表达式的值是多少?I=1;I=(I<;<;=1%2)(a)2(b)1(c)0(d)语法错误

以下表达式的值是多少?I=1;I=(I<;<;=1%2)(a)2(b)1(c)0(d)语法错误,c,C,以下表达式的值是多少 I = 1; I = (I<<= 1 % 2) 在第一个表达式中,值显然是1 在第二个表达式中,您有未定义的行为,因为I在没有干预的情况下被修改了两次。您试过运行它吗?我心情很好。。在这种情况下,运行它并没有真正的好处——因为它有未定义的行为,从编译器中的差异到编译器标志到月亮的相位,任何事情都可能导致不同的结果从您的应用程序中删除此代码并解雇原作者这给我的印象是,问题可能来自面试或学术界,但编写问题的人实际上没有资格这样做-D@Nik

以下表达式的值是多少

      I = 1;
      I = (I<<= 1 % 2)

在第一个表达式中,值显然是
1


在第二个表达式中,您有未定义的行为,因为
I
在没有干预的情况下被修改了两次。

您试过运行它吗?我心情很好。。在这种情况下,运行它并没有真正的好处——因为它有未定义的行为,从编译器中的差异到编译器标志到月亮的相位,任何事情都可能导致不同的结果从您的应用程序中删除此代码并解雇原作者这给我的印象是,问题可能来自面试或学术界,但编写问题的人实际上没有资格这样做-D@NikosC. 您可能是正确的,因为
未定义的行为
不是答案中的选项,所以问题无效。我的回答基于选项(这就是为什么在评论中)@Jim:很多人这么认为,但他们错了。赋值运算符不创建序列点。C99,§6.5/2:“在上一个序列点和下一个序列点之间,对象的存储值最多应通过表达式的计算修改一次。”@JimBalter:the result of
(I@KeithThompson:虽然这看起来确实更合理,但即使这样也不完全准确。例如,由于在表达式已知之前
I
的值,编译器可以在编译时预计算该表达式的任意部分,因此明显的依赖关系完全消失。
(a) 2     
(b) 1      
(c) 0      
(d) syntax error