-2

我从这组条件开始:

if (old.tg.all && old.hg.all) {
    // reject
} 

if (new.tg.all && new.hg.all) {
    // reject
}

if (old.hg.all && new.tg.all) {
    // reject
}

if (old.tg.all && new.hg.all) {
    // reject
}

if (old.tg == new.tg) {
    if  ( (old.hg == new.hg) || (old.hg.all) || (new.hg.all) ) {
        // reject
    }
}

if (old.hg == new.hg) {
    if ( (old.tg == new.tg) || (old.tg.all) || (new.tg.all) ) {
        // reject
    }
}

我设法将其减少到:

if (old.tg.all || new.tg.all) && (old.hg.all || new.hg.all) {
    // reject
}

if (old.tg == new.tg) {
    if  ( (old.hg == new.hg) || (old.hg.all) || (new.hg.all) ) {
        // reject
    }
}

if (old.hg == new.hg) {
    if ( (old.tg == new.tg) || (old.tg.all) || (new.tg.all) ) {
        // reject
    }
}

是否可以进一步减少逻辑运算和/或布尔条件重复的数量?

4

1 回答 1

1

对于您关于逻辑表达式简化的原始问题

首先,“表达式简化”不是一个定义明确的操作。

其次,简化逻辑表达式(或多或少)标准理解是析取范式(或者,或者,它的兄弟连取范式)。两者都可能比您的原始表达式和简化的表达式更简单。

至少,它们最小化了表达式的深度

对于您完全重写的关于 C 代码的问题

主要问题不是简单性,而是意图的清晰性以及由此产生的可维护性。您不应该担心您编写的字符数或代码行数,而应该担心理解和修改代码逻辑的难度。只要代码清晰,一点冗余和/或额外(廉价)检查就不会受到伤害。

于 2013-03-18T17:54:08.153 回答