<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>js加减乘除计算器代码</title>
<style>
body,ul{ margin:0pxpadding:0px}
body{ background:#AF6332}
li{ list-style:none}
.fl{ float:left}
.fr{ float:right}
.clearfix:after{ content:""display:blockclear:both}
.clearfix{zoom:1}
/*是用inset可以将外部阴影改成内部阴影若要实现内外阴影同时存在,将其并在一行用逗号隔开*/
.calBox{ width:460pxpadding-bottom:10pxbackground:#FDFDFDborder-radius:5pxposition:absoluteleft:50%top:50%margin-left:-230pxmargin-top:-225pxbox-shadow:0px 0px 10px rgba(0,0,0,0.8),0px 0px 10px rgba(0,0,0,0.5) inset-webkit-box-shadow:0px 0px 10px rgba(0,0,0,0.8),0px 0px 10px rgba(0,0,0,0.5) insetbackground:#F9F9F9overflow:hidden}
input{ width:406pxheight:82pxmargin:10px 7px 0pxborder-radius:5pxborder:1px solid #64655Fbox-shadow:0px 5px 2px rgba(157,157,145,0.8) inset-webkit-box-shadow:0px 5px 2px rgba(157,157,145,0.8) insetoutline:nonebackground:#FCFDEBtext-align:rightfont-family:"微软雅黑"font-size:40pxpadding:0px 10px}
ul{}
li{ list-style:nonewidth:74pxheight:34pxline-height:34pxtext-align:centerfont-family:"微软雅黑"border:1px solid #8B8B8Bborder-radius:5pxbackground:url(/jscss/demoimg/201402/calBg) repeat-xfloat:leftmargin:12px 6px 0px}
.one li{ height:44pxbackground:url(/jscss/demoimg/201402/calBg1.jpg) repeat-xline-height:44pxcursor:pointer}
.one .orange{ background:url(/jscss/demoimg/201402/calBg2.jpg) repeat-xborder:1px solid #875733}
.one .black{ background:url(/jscss/demoimg/201402/calBg3.jpg) repeat-xborder:1px solid #363636color:#fff}
.one .gray{ background:url(/jscss/demoimg/201402/calBg4.jpg) repeat-xborder:1px solid #5F6366}
.zero{ width:160px}
.one .deng{ background:url(/jscss/demoimg/201402/calBg5.jpg)height:100px}
.twoBox{ width:353pxoverflow:hidden}
.two{ width:358px}
.calBox .three { margin:0px}
.calu{ padding:0px 10pxwidth:470px}
</style>
<script type="text/javascript">
function findArr(a,c){for(var b=0b<a.lengthb++){if(a[b]==c){return true}}return false}function getClass(d,f){if(document.getElementsByClassName){return d.getElementsByClassName(f)}else{var a=[]var e=document.getElementsByTagName("*")for(var c=0c<e.lengthc++){var b=e[c].className.split(" ")if(findArr(b,f)){a.push(e[c])}}return a}}
window.onload=function()
{
var aNum=getClass(document,'num')
var oText=document.getElementById('text')
var aPer=getClass(document,'oper')
var oPer=document.getElementById('per')
var oText1=document.getElementById('text1')
var oDeng=getClass(document,'deng')[0]
var oSq=getClass(document,'sq')[0]
var oRec=getClass(document,'rec')[0]
var oZheng=getClass(document,'zheng')[0]
var oOn=getClass(document,'on')[0]
var oOff=getClass(document,'off')[0]
var oClea=getClass(document,'clea')[0]
var bOnOrOffClick=false
function fnNum(a)
{
var bClear=false
oText.value='0'
for(var i=0i<aNum.lengthi++)
{
aNum[i].onclick=function()
{
if(!bOnOrOffClick)return
if(bClear)
{
bClear=false
}
if(oText.value.indexOf('.')!=-1)
{
if(this.innerHTML=='.')
{
return
}
}
if(oPer.value&&oText.value&&oText1.value=='')
{
oText1.value=oText.value
oText.value=''
}
var re=/^0\.{1}\d+$/
var re1=/^([0]\d+)$/
oText.value+=this.innerHTML
if(re.test(oText.value))
{
return
}
if(re1.test(oText.value))
{
oText.value=this.innerHTML
}
}
//符号部分的添加
for(var j=0j<aPer.lengthj++)
{
aPer[j].onclick=function()
{
if(oText.value&&oPer.value&&oText1.value)
{
var n=eval(oText1.value+oPer.value+oText.value)
oText.value=n
oText1.value=''
}
oPer.value=this.innerHTML
}
}
//点击等号的时候
oDeng.onclick=function()
{
//+-*/%的情况
if(oText1.value==''&&oPer.value==''&&oText.value=='')
{
return
}
var n=eval(oText1.value+oPer.value+oText.value)
oText.value=n
oText1.value=''
oPer.value=''
bClear=true
}
//点击开根号的时候
oSq.onclick=function()
{
var m=Math.sqrt(oText.value)
oText.value=m
}
//点击倒数的时候
oRec.onclick=function()
{
var a=1/oText.value
if(oText.value=='0')
{
a='正无穷'
}
oText.value=a
}
//正负号的时候
oZheng.onclick=function()
{
if(oText.value>0)
{
oText.value=-oText.value
}
else
{
oText.value =-oText.value
}
}
//清屏的时候
oClea.onclick=function()
{
oText.value='0'
oText1.value=''
oPer.value=''
}
}
}
//on时
oOn.onclick=function()
{
bOnOrOffClick=true
fnNum(bOnOrOffClick)
}
//off时
oOff.onclick=function()
{
bOnOrOffClick=false
fnNum(bOnOrOffClick)
oText.value=''
}
}
</script>
</head>
<body>
<div class="calBox">
<div class="calu">
<input type="text" id="text">
<ul class="one clearfix">
<li class="orange on">开机</li>
<li class="orange off">关机</li>
<li class="orange clea">清屏</li>
<li class="black zheng">+/-</li>
<li class="black rec">1/x</li>
<li class="num">7</li>
<li class="num">8</li>
<li class="num">9</li>
<li class="gray oper">/</li>
<li class="black oper">%</li>
<li class="num">4</li>
<li class="num">5</li>
<li class="num">6</li>
<li class="gray oper">*</li>
<li class="black sq">√</li>
<!-- -->
</ul>
<div class="clearfix">
<div class="twoBox fl">
<ul class="one fl two">
<li class="num">1</li>
<li class="num">2</li>
<li class="num">3</li>
<li class="gray oper">-</li>
<li class="zero num">0</li>
<li class="num">.</li>
<li class="gray oper">+</li>
</ul>
</div>
<ul class="one three clearfix fl">
<li class="black deng fl">=</li>
</ul>
</div>
</div>
</div>
<input type="text" id="per" style="display:none">
<input type="text" id="text1" style="display:none">
<div style="text-align:centerclear:both">
</div>
</body>
</html>
1、DSP采用哈佛结构总线,程序存储器和数据存储器分开,取指和数据访问同时进行。通用CPU采用冯.诺依曼型总线,程序和数据总线共享同一总线,取指和数据访问不能并发。2、流水线操作(pipeline),取指、译码、寻址、取数、运算、存储流水操作,等效单周期完成指令,而通用CPU通常一条指令需要几个时钟周期才可以完成。当然,流水线操作引入了一些新问题,比如需要在适当位置加NOP空操作指令或者调整指令位置以确保流水操作能顺利完成。
3、独立的硬件乘法器。卷积、数字滤波、FFT、相关、矩阵运算等算法中,大量重复乘法和累加。MAC指令(取数、乘法、累加)在单周期内完成(通过流水线等效实现),比用软件乘法快很多。
4、独立的DMA总线和控制器。通用CPU中的总线是共享的,DMA使用了总线则CPU就要等待,而DSP中的DMA使用独立的DMA总线通路,可以和CPU core并发操作。独立的源、目的地址寄存器、长度寄存器,自动计算地址和循环。光DSP处理器运算速度快还不行,还与数据吞吐率有关。
5、中心算术逻辑单元CALU。DSP中有很多ALU,如DMA控制器、地址发生器中就含有可做乘加运算的ALU,这样他们就不用占用CALU了。DSP中的ALU非常简单,地址、乘法、移位都不管了,只管算术与逻辑运算。
6、移位:通用CPU每次移动1bit,DSP可在一个机器周期内左移/右移多个比特。可用来对数字定标,使之放大或缩小以保证精度和防止溢出,还可以用来做定点数和浮点数之间的转换。
7、溢出:通用CPU中,溢出发生后,设置溢出标志位,不带符号位时回绕,带符号位时反相,带来很大误差。此时,溢出已经发生,无法挽回。DSP把移位输出的最高位(MSB)存放在一个位检测状态寄存器中,检测到MSB=1时,就通知下一次会发生溢出,此时溢出还未发生,来得及采取措施防止。
8、数据地址发生器(DAG)。取数不光要占用数据总线,还要计算地址。通用CPU数据、地址的产生和数据的处理都由ALU来完成。DSP中,设置了专门的数据地址发生器(实际上就是专门的ALU),来产生所需要的数据地址,节省公共的ALU时间。CALU主要做运算而不是做这些辅助的工作。
9、外设(peripherals)
时钟发生器、定时器、软件可编程等待状态发生器、GPIO、同步串口与异步串口、JTAG。
10、CSSU比较、选择、存储单元。用于维特比译码,通信中常用算法,专门设计一个硬件单元用于此算法。
11、片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问。片内RAM同片外存储器相比,有以下优点:(1)片内RAM的速度较快,可以保证DSP无等待运行;(2)对于C2000/C3x/C5000系列,部分片内存储器可以在一个指令周期内访问两次,使得指令可以更加高效(3)片内RAM运行稳定,不受外部的干扰影响,也不会干扰外部。 4)DSP片内多总线,在访问片内RAM时,不会影响其它总线的访问,效率较高。
12、具有低开销或无开销循环及跳转的硬件支持。
13、快速的中断处理和硬件I/O支持。