标签: boolean-algebra

为什么 Java Boolean 实现了 Comparable?

在Java中,运营商<>>=<=不是为原始定义的boolean类型。但是,相应的包装类Boolean实现了Comparable. 也就是说:true > false 是一个错误,但Boolean.TRUE.compareTo(Boolean.FALSE) > 0很好。

怎么来的?语言设计者改变主意了吗?那为什么要保持语无伦次的行为呢?

尽管随意,但我可以想到为布尔值定义总顺序的优点。有什么缺点吗?

java boolean-algebra

7
推荐指数
1
解决办法
121
查看次数

是否有一种已知的算法可以通过数字比较来简化布尔表达式?

例如,如果我有表达式(A > 5) && (A == 6),则该表达式可以简化为 just (A == 6),并且对于 A 仍然具有相同的行为??.

我还需要它处理多个变量,因此例如((B > 2) && (C == 2)) || ((B > 2) && (C < 2))应该简化为(B > 2) && (C < 3).

我不需要比较两个未知数,只需要比较未知数和数字,我只需要它与运算符<, >, 和==数字,和&&||表达式(当然&&是 AND 和||OR )一起工作。所有未知数都是整数。

是否有任何算法采用这样的表达式并返回具有相同行为和最少运算符数量的表达式?

(在我的特定情况下,||运算符优先于&&

algorithm compiler-optimization boolean-algebra

7
推荐指数
1
解决办法
174
查看次数

使用TSQL进行逐位运算,如旋转,选择性位反转

如何使用TSQL进行按位操作.

我想将1位向左移位.最左边的位也应该变成极右位.

Eg1:
Declare @a tinyint = 15
--Which is equal to 0000 1111

I need the result to be 30
--Which is equal to 0001 1110

Eg2:
Declare @a tinyint = 16
--Which is equal to 0001 0000

I need the result to be 32
--Which is equal to 0010 0000
Run Code Online (Sandbox Code Playgroud)

或选择性地反转一点.例如,这里反转第3位位置

input:  0011 0010
result: 0011 1010
Run Code Online (Sandbox Code Playgroud)

为了便于理解,我以二进制显示输入,实际上输入必须是int类型.像0001 0000代表16.

t-sql sql-server boolean-operations sql-server-2012 boolean-algebra

3
推荐指数
1
解决办法
413
查看次数

如何在满足特定条件的字符串列表中添加子字符串?

假设我有一个像这样的字符串列表:

['001+11', '010+10', '011+01', '100+11']
Run Code Online (Sandbox Code Playgroud)

我想得到这个:

['0*0*1+1*1', '0*1*0+1*0', '0*1*1+0*1', '1*0*0+1*1']
Run Code Online (Sandbox Code Playgroud)

我知道这里的条件是,每当有 0 或 1 时,我们必须用数字+“*”替换数字,但当数字的下一个元素是“+”时不要这样做。所以我写了一个 python 代码如下-

binary=["0","1"]
for string in out:#out is the list of strings
    for i in range(len(string)):
        if string[i] in binary:
            out[out.index(string)]=change(string,string[i],string[i]+"*")
            break
print out
Run Code Online (Sandbox Code Playgroud)

这使输出为-

['0*01+01', '0*00+01', '0*11+00', '0*10+00', '1*01+11', '1*00+11', '1*11+10', '1*10+10']
Run Code Online (Sandbox Code Playgroud)

所以,我意识到如果我多次运行“while 循环”,我会得到我想要的(while 循环,因为我们必须提到“for 循环”中循环重复的次数,这里不是一个选择)。但是我无法弄清楚 while 的条件应该是什么。很多这一切听起来有点复杂,所以我想,也许还有其他方法可以实现我想要的东西。因此,问题。

注意--这是一个更大的程序的一部分,用于从任何不是用 Python 格式编写的布尔表达式中获取真值表。如果这部分解决了,其余部分可能可以使用 eval 解决。提前谢谢!

EDIT1--change 是用户定义的函数,它更改较大字符串的子字符串。

def change(string,old,new):
    pos=string.index(old)
    return string[:pos]+new+string[pos+1:]
Run Code Online (Sandbox Code Playgroud)

python string loops python-2.7 boolean-algebra

1
推荐指数
1
解决办法
67
查看次数

布尔代数 - 为什么不(真和假)是真的?

我正在写这本书"艰难地学习python".在练习27(http://learnpythonthehardway.org/book/ex27.html)中,它以布尔代数开始.

所以我的问题是:为什么是not(True and False)真的?

我是如何理解的,它应该是一样的False and True.

python boolean boolean-algebra

0
推荐指数
2
解决办法
346
查看次数

如何用 AND 重写(P 或 Q)

我正在尝试用汇编语言编写 XOR 运算,但我们允许使用的唯一运算是 AND 和 NOT,不是 OR,也绝对不是 XOR。我在网上到处查了一下,似乎找不到答案。我知道: XOR = (P 或 Q)和 ~(P 和 Q) 但我需要用 AND 运算重写(P 或 Q) 。这可能吗?

assembly boolean-logic boolean-expression demorgans-law boolean-algebra

-1
推荐指数
1
解决办法
1217
查看次数

如何删除 if 块中的否定?

遵循此处推荐的 do..while 模式:

for {
    work()
    if !condition {
        break
    }
}
Run Code Online (Sandbox Code Playgroud)

下面的代码使用 for 循环实现 do..while(condition) :

var r *s
var err error
counter := 0

for { // do..while(specificerror && < MAX && trigger_not_initiated)

    r, err = f()
    counter = counter + 1
    if !(err != nil &&
        strings.Contains(err.Error(), "specificerror") &&
        counter < MAX &&
        !IsTriggerInitiated()) {
        break
    }
}
Run Code Online (Sandbox Code Playgroud)

if但审查小组建议通过删除语句中的否定(条件)中的否定来使 if 条件更具可读性

如何删除否定(条件)forif语句中的否定?

boolean-logic go boolean-algebra

-2
推荐指数
1
解决办法
238
查看次数