2015-12-10 84 views
-2

如果一個整數不均勻(奇數),我想獲得前一個數字,否則我想保留當前數字。例如。如果x = 3,我想分配2x,如果x = 4,則沒有任何反應。上一個偶數

目前,我做了以下工作:x = (x/2)*2,但我聽說該部門計算成本很高。 -O3優化了這個表達式嗎?我正在使用編譯器c++ (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4xuint32_t

+0

'x = x - (x&1)'也許? –

+0

'x =(x >> 1)<< 1;'您可以使用換檔,但編譯器可能會優化乘法和除法。 – owacoder

+0

你也可以使用'x&=〜1',它應該被一個常量編譯成一個'AND'。 – owacoder

回答

2

請嘗試以下

x &= ~1; 

我想,x被聲明爲類型int。否則,如果類型x的等級大於類型爲int的等級,則應該使用變量x類型的整數字面量。