首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件操作符“?:”

条件操作符“?:”
EN

Stack Overflow用户
提问于 2017-06-30 01:36:15
回答 3查看 943关注 0票数 4

我昨天用C语言做了编程考试。有一个问题我不能回答,即使我今天学习了,我也想不出一个解决方案。

所以我们有这个:

代码语言:javascript
复制
int A= -1 , B= -2, C= -3, X=1;
X = B != C ? A=(~C) - A-- : ++C + (~A);
printf("A= %d  B= %d  C =%d  X=%d \n", A,B,C,X);

我知道这个运算符的功能,如果X = B != C为真,则执行A=(~C) - A--。如果为false,则执行++C + (~A)

谁能告诉我并解释一下那个printf中A、B、C和X的值是什么

新的

这包含在一个要求对整个程序进行“跟踪”的问题中:

代码语言:javascript
复制
     #include <stdio.h>
            void main(){
            int A= -1 , B= -2, C= -3, X=1;

        X = B != C ? A=(~C) - A-- : ++C + (~A);
        printf("A= %d  B= %d  C =%d  X=%d \n", A,B,C,X);

if(~A){
        printf("\n out1\n");
        C= A | B
        printf("A= %d  B= %d  C =%d  X=%d \n", A,B,C,X);
        C= C <<1;}

if(A^B){
         printf("\n out2\n");
        C= B & A
        B += 2
        X= X>>1
        printf("A= %d  B= %d  C =%d  X=%d \n", A,B,C,X);

顺便问一下,谁能告诉我这些if条件是什么意思?

EN

回答 3

Stack Overflow用户

发布于 2017-06-30 01:42:48

这句话

代码语言:javascript
复制
X = B != C ? A=(~C) - A-- : ++C + (~A);

等同于

代码语言:javascript
复制
if(B != C)
    X = (A = (~C) - (A--));
else 
    X = ++C + (~A);

因此,表达式A = (~C) - (A--)调用未定义的行为。在这种情况下,不能期待任何好的东西。

也就是说,这是一个错误的问题,不应该在考试中问。或者,只要一个选项声明代码将调用未定义的行为,就可以用多个选项答案来询问它。

票数 8
EN

Stack Overflow用户

发布于 2017-06-30 01:43:28

此问题永远不应出现在考试中,因为它包含未定义的行为。

具体地说,此赋值A = (~C) - A--修改A两次-在--复合赋值中,以及在赋值本身中。由于两者之间没有sequence point,因此行为是未定义的。

注意:这并不意味着程序不会打印任何东西。它肯定会在大多数平台上产生一些输出。然而,这些都无关紧要,因为C程序是完全无效的:它可以产生任何它选择的输出,不产生任何输出,甚至崩溃。

票数 3
EN

Stack Overflow用户

发布于 2017-06-30 02:46:26

为什么不用非常详细的解释给你的老师一个惊喜呢?)

代码语言:javascript
复制
    ...
    mov     eax, dword ptr [rbp - 16]       ; get C
    xor     eax, -1                         ; negate C
    mov     ecx, dword ptr [rbp - 8]        ; get A
    mov     edx, ecx                        ; put A into edx
    add     edx, -1                         ; add -1 to edx => A--
    mov     dword ptr [rbp - 8], edx        ; store result inside A
    sub     eax, ecx                        ; substract from ~C what was the result of A--
    mov     dword ptr [rbp - 8], eax        ; store it inside variable A
    ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44831643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档