C 的三目運算子效率如何,C 中三目運算子是什麼,怎麼用

時間 2021-10-17 04:55:59

1樓:等待的幸福快樂

效率:如果說在可讀性、效率上都比不上if/else,那咱還要它幹嘛!而且跟蹤除錯上來說,一定就比if/else差。

這些暫且都不說,看看下面這段**:

#include

intmain()

用g++得到其對應的彙編**:

movl $1,-4(%ebp) ;a

movl $2,-8(%ebp) ;b

movl -4(%ebp),%eax ;if/else開始

cmpl -8(%ebp),%eax

jge l2

movl -4(%ebp),%eax

movl %eax,-12(%ebp)

jmp l3

l2:movl -8(%ebp),%eax

movl %eax,-12(%ebp) ;if/else結束

l3:movl -8(%ebp),%eax ; ?:開始

cmpl -4(%ebp),%eax

jle l4

movl -4(%ebp),%eax

l4:movl %eax,-12(%ebp) ; ?:結束

算起來,if/else用了8條指令,?:用了5條,這個差距大家並不覺得大嗎?如果這是在一個迴圈裡面呢?

三目運算子是?:結構的運算

所謂三目就是需要三個變數進行運算的操作。它等價於短if-else操作。

舉個簡單的例子:

c=a>b?a:b

這可分成幾個部分,用括號分開:

(a=)(2>1)?(3):(4)

最左邊是賦值操作

第二個部分是一個判斷

第三和第四部分是兩個常數

首先判斷第三部分是否成立,成立即選擇第三部分,否則選擇第四部分

它相當於

if(a>b)

c=a;

else

c=b;

上面的例子用於獲得a和b的最大值。

這種運算還可以巢狀

比如判斷year是不是閏年,是則返回1,不是返回0

flag=(year%100==0)?(year%400==0?1:0):(year%4==0?1:0)

2樓:匿名使用者

效率的確不如if/else,但是差不多,可以忽略不計

但是一般規範不建議使用三目運算子,

主要不是出於效率考慮,而是因為三目運算子晦澀難懂,並且不容易跟蹤除錯

3樓:

如果說在可讀性、效率上?:都比不上if/else,那咱還要它幹嘛!而且跟蹤除錯上來說?:一定就比if/else差?

這些暫且都不說,看看下面這段**:

#include

intmain()

用g++得到其對應的彙編**:

movl $1,-4(%ebp) ;a

movl $2,-8(%ebp) ;b

movl -4(%ebp),%eax ;if/else開始cmpl -8(%ebp),%eax

jge l2

movl -4(%ebp),%eax

movl %eax,-12(%ebp)

jmp l3

l2:movl -8(%ebp),%eax

movl %eax,-12(%ebp) ;if/else結束l3:

movl -8(%ebp),%eax ; ?:開始cmpl -4(%ebp),%eax

jle l4

movl -4(%ebp),%eax

l4:movl %eax,-12(%ebp) ; ?:結束算起來,if/else用了8條指令,?:用了5條,這個差距大家並不覺得大嗎?如果這是在一個迴圈裡面呢?

適當的時候知道用?:代替if/else,這是功力,是經驗

4樓:匿名使用者

同意 匿名 的回答,**的可讀性才是重要的

c++中三目運算子是什麼,怎麼用

5樓:匿名使用者

三目運算子是?:結構的運算

所謂三目就是需要三個變數進行運算的操作。版它等權價於短if-else操作。

舉個簡單的例子:

c=a>b?a:b

這可分成幾個部分,用括號分開:

(a=)(2>1)?(3):(4)

最左邊是賦值操作

第二個部分是一個判斷

第三和第四部分是兩個常數

首先判斷第三部分是否成立,成立即選擇第三部分,否則選擇第四部分它相當於

if(a>b)

c=a;

else

c=b;

上面的例子用於獲得a和b的最大值。

這種運算還可以巢狀

比如判斷year是不是閏年,是則返回1,不是返回0flag=(year%100==0)?(year%400==0?1:0):(year%4==0?1:0)

6樓:匿名使用者

三目運算就是下面這算式了

a>="a"&&a<="z")?(a+32):a它的意思是:a代表的字元在小寫字母'a'和'z'之間嗎?如果回是答,運算結果是

a+32;如果不是,結果是a

這段程式應該是字母大小寫轉換,但有點問題。如果是想把小寫轉成大寫,後面應該是(a-32);如果是想把大寫轉成小寫,引號裡應該是大寫字母a和z

7樓:匿名使用者

x = p? q: r; 相當於是 if(p) x=q; else x=r;

cout << p? q: r; 相當於是 if(p) cout << q; else cout << r;

c++三目運算子?:是幹嘛用的?

8樓:匿名使用者

三目運算子《表示式1>?《表示式2>:《表示式3>; ,屬於關係運算子,

常用於關係比較,主要用於比較關係的狀態只有兩種的情況(大於 和 不大於,真 和 假)

先求表示式1的值, 如果為真, 則執行表示式2,並返回表示式2的結果 ; 如果表示式1的值為假, 則執行表示式3 ,並返回表示式3的結果

比如以下表示式:

a>0? a++:(a = 1)

當a>0為真 時,執行a++,整個表示式的值等於表示式a++的值,當a>0為假 時,執行a=1,整個表示式的值等於表示式a=1的值。

9樓:匿名使用者

a>b? a:b

等價於if(a>b)

print("%d",a);

else

print("%d",b);

10樓:匿名使用者

相當於一個條件判斷。

11樓:匿名使用者

比如說max=a>b?a:b ; 如果a>b,max就等於a,反之等於b

c++ 三目運算子問題

12樓:匿名使用者

三目運算就是下面這算式了

a>="a"&&a<="z")?(a+32):a它的意思是:a代表的字元在小寫字母'a'和'z'之間嗎?如果是,運算結果是a+32;如果不是,結果是a

這段程式應該是字母大小寫轉換,但有點問題。如果是想把小寫轉成大寫,後面應該是(a-32);如果是想把大寫轉成小寫,引號裡應該是大寫字母a和z

13樓:匿名使用者

語法錯誤a>="a"&&a<="z":應該是a>='a'&&a<='z'吧,如果雙引號應該就表示是字串了,所以應該是單引號。

如果想轉換大小寫a+32,應該改為a-32,好像是a=96,a=64。

三目運算子的意思就是:如果變數a 在字元'a'與'z'之間,就返回a+32的值,如果不是,則返回a的值。

然後再將返回的值賦給變數a。

14樓:匿名使用者

a=(a>='a'&&a<='z')?(a-32):a功能將a中的字母小寫轉換為大寫

a=(a>='a'&&a<='z')?(a+32):a功能將a中的字母大寫轉換為小寫

條件運算子和條件表示式

如果在條件語句中,只執行單個的賦值語句時, 常可使用條件表示式來實現。不但使程式簡潔,也提高了執行效率。

條件運算子為?和:,它是一個三目運算子,即有三個參與運算的量。

由條件運算子組成條件表示式的一般形式為:

表示式1? 表示式2: 表示式3

其求值規則為:如果表示式1的值為真,則以表示式2 的值作為條件表示式的值,否則以表示式2的值作為整個條件表示式的值。

條件表示式通常用於賦值語句之中。

例如條件語句:

if(a>b) max=a;

else max=b;

可用條件表示式寫為

max=(a>b)?a:b;

執行該語句的語義是:如a>b為真,則把a賦予max,否則把b 賦予max。

使用條件表示式時,還應注意以下幾點:

1) 條件運算子的運算優先順序低於關係運算子和算術運算子,但高於賦值符。

因此 max=(a>b)?a:b

可以去掉括號而寫為

max=a>b?a:b

2) 條件運算子?和:是一對運算子,不能分開單獨使用。

3) 條件運算子的結合方向是自右至左。

例如:a>b?a:c>d?c:d

應理解為

a>b?a:(c>d?c:d)

這也就是條件表示式巢狀的情形,即其中的表示式3又是一個條件表示式。

15樓:匿名使用者

a=(a>="a"&&a<="z")為真,就把a+32賦給a;為假,把a賦給a,即不變,然後輸出a。。

16樓:匿名使用者

這是三目運算的形式

表示式1 :? 表示式2:表示式3

先判斷表示式1 是否為真 如果為真 則執行表示式2 否則執行表示式3

所以暱所給題目中 應先判斷?號前的表達真假 真則:a+32 假則:a

?號前 為一個邏輯表示式 加一個賦值語句 先看邏輯表示式真假 將其值賦給a

因為前面為真 所以執行 a+32

注意 此時 a的值已與原來不同

17樓:匿名使用者

那是a+32麼。。好像應該是減吧。。。

18樓:匿名使用者

如果你想把小寫轉成大寫,要寫成(a-32)

c++ 三目運算子是什麼

19樓:砍侃看

#include

int main()

a>b?a:b;

其實dao就相當回於

答if(a>b)

return a;

else

return b;

20樓:fly愛與希望

就是唯一的那個吧

條件?滿足時 。。。。。。。:不滿足時。。。。。。。。。

三目運算子,單目運算子,雙目運算子,三目運算子分別什麼意思。為什麼是單目,雙目,三目

a null po.setname po.setname a 三元運算子的基本格式是 a?b c 等效於 if a true else po.setname stringutils.isblank a a 胡亂寫的,試試再說。單目運算子,雙目運算子,三目運算子分別什麼意思。為什麼是單目,雙目,三目 ...

c 三目運算子怎麼用

漆嚮慕容柳思 三目運算子是?結構的運算 所謂三目就是需要三個變數對能進行運算的操作舉個簡單的例子 a 2 1?3 4 可分成幾個部分,用括號分開 a 2 1 3 4 最左邊是賦值操作 第二個部分是一個判斷 第三和第四部分是兩個常數 首先判斷第三部分是否成立,成立即選擇第三部分,否則選擇第四部分像上面...

c 中的下標運算子有什麼作用,c 中的運算子過載主要用來做什麼?

仙戈雅 c c 下標運算子 的具體作用是取地址運算子,簡稱取址符,它的語義是當前變數的首地址加取中括號裡面的偏移量就可定位指定下標的值在記憶體儲存的位置。 微控制器與plc程式筆記 以下是c 程式語言中的所有運算子的優先順序和結合性列表。優先順序運算子敘述示例過載性結合性1 作用域解析 c 專有 c...