如何在JavaScript中实现乘法器电路
TBH我很难理解逻辑门图,因为我还没有完全理解低级电子设备以及它们是如何工作的 我有一点学习基本逻辑门的经验,在看了一些视频并思考了很多之后,在它消失之前,我能理解它几分钟 但后来我看到了一些在软件中实现的逻辑门的例子,这使发生的事情更有意义。例如 然后我甚至能够进一步了解a的工作原理,如: 与逻辑图相比,这是非常基本的 现在我想了解和是如何在逻辑门中实现的,比如x86的操作符如何在JavaScript中实现乘法器电路,javascript,logic,multiplication,circuit,Javascript,Logic,Multiplication,Circuit,TBH我很难理解逻辑门图,因为我还没有完全理解低级电子设备以及它们是如何工作的 我有一点学习基本逻辑门的经验,在看了一些视频并思考了很多之后,在它消失之前,我能理解它几分钟 但后来我看到了一些在软件中实现的逻辑门的例子,这使发生的事情更有意义。例如 然后我甚至能够进一步了解a的工作原理,如: 与逻辑图相比,这是非常基本的 现在我想了解和是如何在逻辑门中实现的,比如x86的操作符 function MUL(a,b){ return { ... }; } 我真的不知道从哪里开始,除
function MUL(a,b){
return {
...
};
}
我真的不知道从哪里开始,除了花一些时间去理解乘法器电路,并尝试使用上面的例子将其转换成一个与非门实现。想知道知道这一点的人是否可以用JavaScript演示实现。乘法依赖于二进制编码的方式。 如果A是无符号的,并由位A_n-1、A_n-2、…、A_1、A_0编码,则其值为 A=A_n-1*2^n-1+A_n-2*2^n-2+…+A_1*2^1+A_0 所以要乘以A×B,你必须 A×B=A×B_n-1*2^n-1+B_n-2*2^n-2+…+B_1*2^1+B_0 =A×b_n-1*2^n-1+A×b_n-2*2^n-2+…+A×b_1*2^1+A×b_0 乘法只是一个大的加法,其中每个项a×b_i*2^i要么是a×2^i,如果b_i==1,要么是0,如果b_i==0 这是一个C语言的实现
int mult(unsigned short A, unsigned short B){
int res=0;
int mask=0x1;
for(int i=0; i<16;i++,mask<<=1){
if(B&mask)
res += (A << i);
}
return res;
}
这或多或少是一个简单的乘法器在硬件中的外观,一旦循环展开。
您可以在js中实现它,用一个用门完成的加法器替换+并使用模拟与门
实际上,硬件乘数要复杂一些
他们使用一个特殊的加法器,无需进位传播,以减少加法时间,节省进位加法。这需要在计算结束时进行额外的添加
他们经常使用base 4来减少添加步骤的数量,从而改进Booth算法
它们通过流水线来提高吞吐量
顺便说一句,您可能会对这些不同的计算机算术算法感兴趣。也许这会有所帮助?可选进位逻辑:c:oranda,b,anda,c,andb,c/c:nanda,b,nanda,c,nandb,cI想了解[除法]是如何在逻辑门中实现的,祝你好运。
int mult(unsigned short A, unsigned short B){
int res=0;
int mask=0x1;
for(int i=0; i<16;i++,mask<<=1){
if(B&mask)
res += (A << i);
}
return res;
}
int mult(unsigned short A, unsigned short B){
int res=0;
int mask=0x1;
for(int i=0; i<16;i++,mask<<=1){
res += (A&~(((B&mask)>>i) -1))<<i;
}
return res;
}
int mult(unsigned short A, unsigned short B){
int res=0;
int mask=0x1;
for(int i=0; i<16;i++){
res += A&~((B&mask) -1);
A <<= 1;
B >>= 1;
}
return res;
}