条件运算符 "? : "

标签 c conditional-operator

我昨天用 C 语言完成了编程考试。有一个问题我无法回答,即使我今天研究了我也想不出一个解决方案。

所以我们有这个:

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--。如果为假,则执行 ++C + (~A)

谁能告诉我并解释一下 printf 中 A、B、C 和 X 的值是多少?

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

     #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 条件是什么意思?

最佳答案

声明

X = B != C ? A=(~C) - A-- : ++C + (~A);

相当于

if(B != C)
    X = (A = (~C) - (A--));
else 
    X = ++C + (~A);

因此,表达式 A = (~C) - (A--) 调用未定义的行为。在这种情况下,没有什么好期待的。

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

关于条件运算符 "? : ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44831643/

相关文章:

C++ lambda 的三元赋值

c - 将结构成员保存到 C 中的 .txt 文件时出现意外结果

c - 关于c程序中的myfopen()

c# - 在通用列表的 ForEach() 的 lambda 表达式中使用条件运算符?

c - 三元运算符中的赋值

c# - 如何在 datetime 为 null 时将可为空的 datetime 值转换为 string.empty?

c - 尝试更改 char* 字符串中的符号时出现段错误

用于游戏服务器的 C++ MySQL

检查字符串中的数字是否对称(边缘)

如果变量为 NULL,则有条件地设置它