我正在做位數&兩位數組之間保存old_array結果,我想擺脫if/else語句。我應該使用BIT_STATE宏,但是如何?如何用位操作替換這個if/else語句?
#define BYTE_POS(pos) (pos/CHAR_BIT)
#define BIT_POS(pos) (1 << (CHAR_BIT - 1 - (pos % CHAR_BIT)))
#define BIT_STATE(pos, state) (state << (CHAR_BIT - 1 - (pos % CHAR_BIT)))
if (((old_array[BYTE_POS(old_pos)] & BIT_POS(old_pos)) != 0) &&
((new_array[BYTE_POS(new_pos)] & BIT_POS(new_pos)) != 0))
{
old_array[BYTE_POS(old_pos)] |= BIT_POS(old_pos);
}
else
{
old_array[BYTE_POS(old_pos)] &= ~(BIT_POS(old_pos));
}
如果您將代碼簡化爲相關位,將會非常有幫助。例如,你有'old_array [BYTE_POS(old_pos)]'是否相關?你不能只用'x'嗎? – 2012-03-23 10:45:47
[位操作而不是如果複製位圖]的可能的重複(http://stackoverflow.com/questions/9829544/bit-operation-instead-of-if-for-copying-bit-maps) – 2012-03-23 11:40:58
相關,但不重複。 – maasha 2012-03-23 12:24:32