C语言中的一个指令语句,不理解其意思,求详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中的一个指令语句,不理解其意思,求详解相关的知识,希望对你有一定的参考价值。

语句如下:
rv_RDC_tim_NozlCtrlPeriod_fpS = (real32_T)(tmp < 0.0 ? -((int16_T)(uint16_T) (-tmp)) : (int16_T)(uint16_T)tmp) * 0.0625F * ((real32_T)(tmp_0 < 0.0 ?-((int16_T)(uint16_T)(-tmp_0)) : (int16_T)(uint16_T)tmp_0) * 0.0625F);
其中 rv_RDC_tim_NozlCtrlPeriod_fpS、tmp以及tmp_0是已经定义的变量。

rv_RDC_tim_NozlCtrlPeriod_fpS = |tmp|*0.0625*|tmp_0|*0.0625
其中|tmp|和|tmp_0|表示绝对值的意思
参考技术A 你是要参加C乱码大赛吗?没有就不要这样写。实际编程中一般不会写出这种代码让别人看。 参考技术B 这么长,不过你去看下三元运算符?:的含义就明白了 参考技术C 纯属吹牛b的。无视。 参考技术D 这个代码看完脑细胞都要死几百万 第5个回答  2013-07-15 看一下三目运算

?和:在C语言中的详解

三元操作符 ?和:直接可以看成是
?就是if语句
:简单的翻译成else语句,但是需要前后放上执行程序。

(1)举例说明:A > B ? A > C ? A : C : B > C ? B : C;这条语句代表什么意思呢?我们把if和esle带入进入看

    if(A>B)
    {
        if(A>C)
            {执行程序A}
        else
            {执行程序C}
    }
    else
    {
     执行程序
        if  (B>C) 
        {执行程序B}
        else
        {执行程序C}
    }

(2)不过这样看上去还是太复杂,我们把程序分类,加上括号后调理看上去就简单多了
(A > B ?)( A > C ? A : C ): (B > C ? B : C)

(3)下面我们分析一个比较复杂的宏定义
#define SHIF16(a) ((a)&0x0001?0: (a)&0x0002?1: (a)&0x0004?2: (a)&0x0008?3:\
(a)&0x0010?4: (a)&0x0020?5: (a)&0x0040?6: (a)&0x0080?7:\
(a)&0x0100?8: (a)&0x0200?9: (a)&0x0400?10:(a)&0x0800?11:\
(a)&0x1000?12:(a)&0x2000?13:(a)&0x4000?14: 15)

                我们看后半段  ((a)&0x0001?0: (a)&0x0002?1: (a)&0x0004?2: (a)&0x0008?3:                   (a)&0x0010?4: (a)&0x0020?5: (a)&0x0040?6: (a)&0x0080?7:                   (a)&0x0100?8: (a)&0x0200?9: (a)&0x0400?10:(a)&0x0800?11:                   (a)&0x1000?12:(a)&0x2000?13:(a)&0x4000?14: 15)               

                                         因为&的运算符的优先级要比:和?都要高,所以我们把(a)&0x0001看成一个整体A0,代表最低位第0位是真还是假,以此类推;
                                         就变成:(A0?0:A1?1:A2?2:A3?3:A4?4:A5?5:A6?6:A7?7:A8?8:A9?9:A10?10:A11?11:A12?12:A13?13:A14?14:15)
                                         这个太难看懂了
                                         我们就取三个分析下
                                         (A0?0:A1?1:A2?2:3)如果是这条语句,那么是什么意思呢?
                                         我们用括号法来分析下:
                                        (A0?)     0     :   {(A1?)1: [(A2?)2:3 ] }

                                         if(A0)//A0是真
                                         {
                                            //那就是0 
                                         }
                                         else
                                         {
                                              if(A1)
                                                {
                                                  //那就是1
                                                }
                                                else
                                                {
                                                    if(A2)
                                                    {
                                                        //那就是2
                                                    }
                                                    else
                                                    {
                                                        //那就是3
                                                    }
                                                }

                                         }
                注释:
                                          (a)&0x0001 ->是最低位
                                          (a)&0x0002 ->是最第1位
                                          (a)&0x0004 ->是最第2位
                                            (a)&0x0008 ->是最第3位
                                            (a)&0x0010 ->是最第4位
                                            (a)&0x0020 ->是最第5位
                                            .
                                            .
                                            .
                                            (a)&0x4000->是最第14位

!!!!!!!!!!!!具体这个宏定义是啥作用评论区来说说吧!!!!!!!

以上是关于C语言中的一个指令语句,不理解其意思,求详解的主要内容,如果未能解决你的问题,请参考以下文章

C语言中for循环怎么理解?

C语言中的整型变量是啥意思?求详解

求一些C语言if嵌套语句算法题

c语言for语句中的条件问题

求详解SQL的CASE函数语句含义

c语言中的“宏”是指啥?