从真值表建立数值乘法器的通用规则。

问题描述 投票:0回答:1

我有一些真值表,主要是AND,基于0,1,-1,我用它来进行数学运算。

例1:

var a,b,c;
if(a ==  1 && b == 1) c = 0;
if(a ==  1 && b == 0) c = 0;
if(a == -1 && b == 1) c = 0;
if(a == -1 && b == 0) c = 1;

例2:

var a,b,c;
if(a ===  1 && b === 1) c =  1;
if(a ===  1 && b === 0) c =  1;
if(a === -1 && b === 1) c =  1;
if(a === -1 && b === 0) c = -1;

例如,第一个真值表可以表达如下:

c = (a>>1)*(b-1);

我想把第二个真值表也转换为只用数学或位智运算符的真值表,怎么做?

有没有什么通用的规则可以轻松地创建这样的单行表达式?

javascript bit-manipulation
1个回答
1
投票

你可以使用一个通用的超级优化器,比如我写的这个(不幸的是不太友好)。https:/github.comfalk-hueffnersematrope

这将给你 (a + b) >>> 31 对于你的第一个例子和 ((a + b) | b) & a 为第二种。

如果想要更系统的方法,你可以通过以下方法将-11转换为01 (x >> 1) + 1,做常规的逻辑运算,用 |&^然后(如果需要)通过以下方法将01转换为-11 x ^ (x - 1).


0
投票

如果 a 总是 1-1b 总是 10,你可以使用布尔运算符(||),那么

c = b || a

应该这样做...

const c = (a, b) => b || a

console.log(c( 1, 1)) // 1
console.log(c( 1, 0)) // 1
console.log(c(-1, 1)) // 1
console.log(c(-1, 0)) //-1
© www.soinside.com 2019 - 2024. All rights reserved.