-2
如果一個整數不均勻(奇數),我想獲得前一個數字,否則我想保留當前數字。例如。如果x = 3
,我想分配2
到x
,如果x = 4
,則沒有任何反應。上一個偶數
目前,我做了以下工作:x = (x/2)*2
,但我聽說該部門計算成本很高。 -O3
優化了這個表達式嗎?我正在使用編譯器c++ (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
。 x
是uint32_t
。
如果一個整數不均勻(奇數),我想獲得前一個數字,否則我想保留當前數字。例如。如果x = 3
,我想分配2
到x
,如果x = 4
,則沒有任何反應。上一個偶數
目前,我做了以下工作:x = (x/2)*2
,但我聽說該部門計算成本很高。 -O3
優化了這個表達式嗎?我正在使用編譯器c++ (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
。 x
是uint32_t
。
請嘗試以下
x &= ~1;
我想,x被聲明爲類型int
。否則,如果類型x的等級大於類型爲int的等級,則應該使用變量x類型的整數字面量。
'x = x - (x&1)'也許? –
'x =(x >> 1)<< 1;'您可以使用換檔,但編譯器可能會優化乘法和除法。 – owacoder
你也可以使用'x&=〜1',它應該被一個常量編譯成一個'AND'。 – owacoder