三目運算子的條件表示式是右結合的

2021-10-01 18:15:05 字數 801 閱讀 8764

三目運算子的小問題。

為了求得乙個字型點陣所佔的大小,定義了如下巨集定義。

#define font_size  12

#define size (font_size*

(font_size/

8+ font_size %8?

1:0)

)

當font_size是8的整數倍時,font_size % 8?1:0為0,當font_size不是8的整數倍時,font_size % 8?1:0為1,我想表達這個意思。然而結果卻是當font_size是12時,size是1,很奇怪,為啥呢。

後來看到說三目運算子是右結合,啥叫右結合,就是從右往左計算唄,然後再看我的表示式,實際是怎麼解讀的呢,

首先計算font_size*(font_size/8+ font_size%8

然後計算條件表示式,font_size*(font_size/8+ font_size%8

是多少呢,是2,然後後面的結果就是1了,所以不對啊,

知道為啥錯了,就可以改了,後面的加個括號,

#define font_size  12

#define size (font_size*

(font_size/8+

(font_size %8?

1:0)

))

條件運算子和條件表示式

有一種if語句,當被判別的表示式的值為 真 或 假 時,都執行乙個賦值語句且向同乙個變數賦值。如 if a b max a else max b 當a b時將a的值賦值給max,當a b時將b的值賦給max,可以看到無論a b是否滿足,都是給同乙個變數賦值。c提供的條件運算子和條件表示式來處理這類問...

三 運算子 表示式

三 運算子 表示式 1.i i的區別 i 是先對 i操作,再對i執行 1 i是先執行 1,將值賦給 i後,再對 i操作 2.邏輯運算子使用需要注意什麼 與或 非 3 7 4 ture 錯誤,因為3 7 判斷為true,true 隱式轉換為 1,因此程式判斷為正確,邏輯判斷錯誤。3 7 7 4 fal...

C 條件運算子(三目運算子)

在某些情況下,可以用條件運算子 來簡化if語句。是乙個三元運算子,其構成的表示式格式為 表示式1 表示式2 表示式3 條件運算子的執行流程示意圖如上圖所示,描述如下 1 計算表示式1的值 2 若表示式的值為真 或非0 則只計算表示式2,並將其結果作為整個表示式的值 反之,即表示式1的值為假 或為0 ...