CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  数据结构与算法

数字电路是怎么实现除法的?

楼主rickone(RickOne)2005-04-03 18:06:31 在 专题开发/技术/项目 / 数据结构与算法 提问

数字电路是怎么实现除法的?  
  如8/5=1  
  有没有个算法的描述? 问题点数:50、回复次数:8Top

1 楼steedhorse(晨星)回复于 2005-04-03 18:26:13 得分 0

好像有一种实现是通过移位依次求出5   *   (2   ^   n)的所有小于8的值,然后依次尝试从8中减去这些值。Top

2 楼steedhorse(晨星)回复于 2005-04-03 18:42:04 得分 10

比如说,这样就可以通过减法和移位实现整除:  
   
  int   devide(int   m,   int   n)  
  {  
  assert(m   >=   0   &&   n   >   0);  
   
  int   i   =   n;  
  while(i   <=   m)  
  i   <<=   1;  
   
  int   j   =   m;  
  while(j   >   n)   {  
  i   >>=   1;  
  if(j   >   i)  
  j   -=   i;  
  }  
   
  return   j;  
  }  
   
  当然,这顶多也就算个“可行性”验证。真正CPU里头的整除部件所用的逻辑肯定比这高效得多,不过具体是什么算法,偶也不知道。:PTop

3 楼97ce_twinkle(毛毛虫)回复于 2005-04-04 09:59:43 得分 0

找本《计算机组成原理》——白中英,  
  第二还是第三章看一看    
   
  Top

4 楼dengsf(drklnk@Radical_Dreamer)回复于 2005-04-04 11:57:03 得分 20

steedhorse(晨星)   说的其实就是类似于我们实际里所用的   试除法,  
    缺点是如果估计的商大时这步就白做了。  
   
    实际里对整数的除法好像有一种叫   加减交替法,不必回退的。我   *想*   CPU里对整数除法可能就用这个了。  
   
    而对浮点的除法,我见过介绍好像有一种是用   牛顿迭代法   的,用加法和乘法部件实现除法的。  
    比如求   a/x,先用迭代法求出   y=1/x   的倒数,然后再做一次   a*y   的乘法就行了。具体如下:  
        它限制   1/2   <=   x   <=   1(实际CPU里有格式化的东西要求最高位为1,所以这个前提是有意义的),并置初值   y0约=1.5   (根据限制条件,初值跟实际值的误差   <=   1/2);  
        迭代时,置   y(i+1)   =   2*yi   -   x*yi*yi。  
  结合x的范围可以得出,如果   |yi   -   1/x|   <=   e,   则   |y(i+1)   -   1/x|   <=   e^2。这样对于   n   位精度的数,只需要   log2(n)   次迭代就得出符合精度要求的结果了。  
   
    intel的CPU浮点加、乘好像只要几个时钟周期,而除法需要几十个周期,所以很可能它就是用了这种方法的~~Top

5 楼zzwu(未名)回复于 2005-04-04 15:23:10 得分 0

除法通常化为减法来做的。Top

6 楼rickone(RickOne)回复于 2005-04-05 12:14:56 得分 0

我的一个师兄说是用逻辑电路方法实现的,就是列真值表,然后列出逻辑表达式,然后化简,然后设计电路,用什么与门,或门连起来....  
  加法的实现我知道,一个全加器,输入Xi,Yi:两个加数,输入低位进位Ci-1,输出结果Si和高位进位Ci,然后列真值表,最后做成电路,然后用8个全加器串接就构成一个8位的加法器,,,  
  除法可不可以这么类似的做?那真值表怎么列?应该也有与'进位'类似的数值吧???Top

7 楼steedhorse(晨星)回复于 2005-04-05 12:42:01 得分 0

除法用真值表的话,即使8bit的寄存器,真值表也要256   ×   256那么大啊。  
  不懂,关注。Top

8 楼zzwu(未名)回复于 2005-04-05 17:38:19 得分 20

除法在计算机中肯定用减法来实现的,但通常要结合“移位”操作。  
   
  不用移位、只用减法,也可以实现的,但速度较慢。  
   
  减法则用补码的加法来实现。  
   
  加法(2进制)则非常方便:a,b相加,则结果的本位值是“a异或b”,而进位值是“   a与b”。  
   
  移位的实现则非常非常方便。  
  Top

相关问题

  • 如何实现长整数的除法
  • 如何实现除法运算
  • 这样的除法,如何实现
  • 怎样对excel中的数字统一做除法?急!
  • 除法竖式的递归实现,很难啊
  • 怎么样实现多项式的除法?
  • 不使用乘法除法模运算实现乘以7除以7?
  • 关系代数中的除法运算用sql语句怎么实现?
  • PHP中的除法运算,怎样才能实现整除呢。比如3/5....???
  • 除法问题

关键词

  • 除法
  • 实现
  • 好像有一种

得分解答快速导航

  • 帖主:rickone
  • steedhorse
  • dengsf
  • zzwu

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo