【发布时间】:2022-06-16 09:15:23
【问题描述】:
我一直在寻找一种将布尔代数中的布尔函数扩展到经典代数的方法,我认为我需要的只是乘法和加法来做到这一点 假设 a,b 是 [0, 2 范围内的两个无符号整数32- 1],我们知道
a + b = a&b + a|b / \"+\" is the ordinary addition in algebra
这是我想要的一半,现在我需要找到a*b 是什么。我尝试了以下方法:
if a = c*d then
cd + b = (cd)&b + (cd)|b
=> cd = (cd)&b + (cd)|b - b
这意味着在任何乘法中我都应该记住第三个变量?我正在寻找的是这样的
ab = f(a,b)
其中f(x,y) 是一个布尔函数
编辑:正如@DavidGrayson 提到的,我应该进一步澄清,我正在寻找的是一种使用带或不带代数运算符(+,-,...)的位运算符组合来描述 a * b 的方法,就像上面的 a + b 我们可以看到我们已经用位运算符描述了代数运算 \'+\',那么我们可以用乘法做同样的事情吗?
-
*是 Markdown 语法中的特殊字符,导致斜体文本。尝试用斜杠转义以修复格式:\\* -
我不确定我明白你在这里问什么。您试图将其推广到乘法的身份
a + b = (a & b) + (a | b)有什么特别之处? -
a + b = a&b + a|b并没有真正完成任何事情。您通过用一些按位运算替换它来“简化”加法,并且......另一个加法。为什么不“简化”为a + b = (a|a) + (b|b)? -
对不起,我还是不明白你在这里问什么。您提到的加法的原始相等性并没有用更简单的操作代替加法,而只是在两个不同的上下文中涉及加法的恒等式。您希望通过乘法复制哪些具体见解?
-
从 1bit*1bit 开始,然后是 2bit*2bit ...使用卡诺图仅获得布尔代数结果...但是对于 32bit * 32bit ,事情将非常复杂...这不是它在实际硬件中的完成方式.. . 通常布尔代数与 Shift 和 Add 或二进制长乘法等顺序自动机中的算术加法相结合......如前所述用相同的运算符定义运算符是无意义的......如果这样编码会导致堆栈溢出...... .
标签: math bit-manipulation bitwise-operators