标签:
项目背景:这是我在大二上计算机组成原理这门课时,老师布置了一个课外作业(可以加分),她的要求是做一个能实现原码、反码、补码、移码的表示以及模仿计算机补码做加减运算功能的网络版软件。为了加平时分,于是我用一周的时间粗略地自学下JavaScript,然后将上述功能实现了,虽然只是一个微乎其微的小项目,但对热爱编程的我来说,还是有很大的成就感,故写下此文章已作留念~~~
下面是实现的页面效果:
下面是实现的JavaScript源码:
<!--wenjan.htm-->
<html>
<head>
<meta http-equiv="Content-Type"content="text/html;charset=gb2312">
<title>shuzu</title>
</head>
<body>
<pre>
<div>
请输入二进制数的位数(包括符号位):<input type="text" name=" textfield" id="max" value="">
请输入十进制数x:<input type="text" name=" textfield" id="x" value="">
原码:<input type="text" name="textfield" id="ansa">
真值:<input type="text" name="textfield" id="ansb">
反码:<input type="text" name="textfield" id="ansc">
补码:<input type="text" name="textfield" id="ansd">
移码:<input type="text" name="textfield" id="anse">
请输入十进制数y:<input type="text" name=" textfield" id="y" value="">
原码:<input type="text" name="textfield" id="ansf">
真值:<input type="text" name="textfield" id="ansg">
反码:<input type="text" name="textfield" id="ansh">
补码:<input type="text" name="textfield" id="ansi">
移码:<input type="text" name="textfield" id="ansj">
补码相加结果:<input type="text" name="textfield" id="ansk">
补码相减结果:<input type="text" name="textfield" id="ansl">
</div>
<h3>单击以下功能按钮,上面对应文本框将显示答案</h3>
<input type="button" name="button" id="button" value="x原码:" onClick="javascript:void fun1()">
<input type="button" name="button2" id="button" value="x真值:" onClick="javascript:void fun2()">
<input type="button" name="button4" id="button" value="x反码:" onClick="javascript:void fun3()">
<input type="button" name="button6" id="button" value="x补码:" onClick="javascript:void fun4()">
<input type="button" name="button8" id="button" value="x移码:" onClick="javascript:void fun5()">
<input type="button" name="button10" id="button" value="y原码:" onClick="javascript:void fun6()">
<input type="button" name="button12" id="button" value="y真值:" onClick="javascript:void fun7()">
<input type="button" name="button14" id="button" value="y反码:" onClick="javascript:void fun8()">
<input type="button" name="button16" id="button" value="y补码:" onClick="javascript:void fun9()">
<input type="button" name="button18" id="button" value="y移码:" onClick="javascript:void fun10()">
<input type="button" name="button20" id="button" value="补码相加:" onClick="javascript:void fun11()">
<input type="button" name="button22" id="button" value="补码相减:" onClick="javascript:void fun12()">
</pre>
</body>
<script language="javascript">
function fun1()
{
var s1,s2;
s1=document.getElementById(‘max‘).value;
s2=document.getElementById(‘x‘).value;
a=parseInt(s1);
b=parseInt(s2);
c=parseInt(s2);
var x=new Array();
if(c>=0)
{
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
document.getElementById(‘ansa‘).value=x.join("");
}
else
{
c=(1<<(a-1))-c;
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
document.getElementById(‘ansa‘).value=x.join("");
}
}
function fun2()
{
var s1,s2;
s1=document.getElementById(‘max‘).value;
s2=document.getElementById(‘x‘).value;
a=parseInt(s1);
b=parseInt(s2);
c=parseInt(s2);
var x=new Array();
if(c>=0)
{
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
if(x[0]==0)
{
x[0]=‘+‘;
}
else
{
x[0]=‘-‘;
}
document.getElementById(‘ansb‘).value=x.join("");
}
else
{
c=(1<<(a-1))-c;
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
if(x[0]==0)
{
x[0]=‘+‘;
}
else
{
x[0]=‘-‘;
}
document.getElementById(‘ansb‘).value=x.join("");
}
}
function fun3()
{
var s1,s2;
s1=document.getElementById(‘max‘).value;
s2=document.getElementById(‘x‘).value;
a=parseInt(s1);
b=parseInt(s2);
c=parseInt(s2);
var x=new Array();
if(c>=0)
{
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
document.getElementById(‘ansc‘).value=x.join("");
}
else
{
c=c-1;
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
document.getElementById(‘ansc‘).value=x.join("");
}
}
function fun4()
{
var s1,s2;
s1=document.getElementById(‘max‘).value;
s2=document.getElementById(‘x‘).value;
a=parseInt(s1);
b=parseInt(s2);
c=parseInt(s2);
var x=new Array();
if(c>=0)
{
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
document.getElementById(‘ansd‘).value=x.join("");
}
else
{
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
document.getElementById(‘ansd‘).value=x.join("");
}
}
function fun5()
{
var s1,s2;
s1=document.getElementById(‘max‘).value;
s2=document.getElementById(‘x‘).value;
a=parseInt(s1);
b=parseInt(s2);
c=parseInt(s2);
var x=new Array();
if(c>=0)
{
c=(1<<(a-1))+c;
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
document.getElementById(‘anse‘).value=x.join("");
}
else
{
c=(1<<(a-1))+c;
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
document.getElementById(‘anse‘).value=x.join("");
}
}
function fun6()
{
var s1,s2;
s1=document.getElementById(‘max‘).value;
s2=document.getElementById(‘y‘).value;
a=parseInt(s1);
b=parseInt(s2);
c=parseInt(s2);
var x=new Array();
if(c>=0)
{
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
document.getElementById(‘ansf‘).value=x.join("");
}
else
{
c=(1<<(a-1))-c;
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
document.getElementById(‘ansf‘).value=x.join("");
}
}
function fun7()
{
var s1,s2;
s1=document.getElementById(‘max‘).value;
s2=document.getElementById(‘y‘).value;
a=parseInt(s1);
b=parseInt(s2);
c=parseInt(s2);
var x=new Array();
if(c>=0)
{
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
if(x[0]==0)
{
x[0]=‘+‘;
}
else
{
x[0]=‘-‘;
}
document.getElementById(‘ansg‘).value=x.join("");
}
else
{
c=(1<<(a-1))-c;
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
if(x[0]==0)
{
x[0]=‘+‘;
}
else
{
x[0]=‘-‘;
}
document.getElementById(‘ansg‘).value=x.join("");
}
}
function fun8()
{
var s1,s2;
s1=document.getElementById(‘max‘).value;
s2=document.getElementById(‘y‘).value;
a=parseInt(s1);
b=parseInt(s2);
c=parseInt(s2);
var x=new Array();
if(c>=0)
{
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
document.getElementById(‘ansh‘).value=x.join("");
}
else
{
c=c-1;
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
document.getElementById(‘ansh‘).value=x.join("");
}
}
function fun9()
{
var s1,s2;
s1=document.getElementById(‘max‘).value;
s2=document.getElementById(‘y‘).value;
a=parseInt(s1);
b=parseInt(s2);
c=parseInt(s2);
var x=new Array();
if(c>=0)
{
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
document.getElementById(‘ansi‘).value=x.join("");
}
else
{
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
document.getElementById(‘ansi‘).value=x.join("");
}
}
function fun10()
{
var s1,s2;
s1=document.getElementById(‘max‘).value;
s2=document.getElementById(‘y‘).value;
a=parseInt(s1);
b=parseInt(s2);
c=parseInt(s2);
var x=new Array();
if(c>=0)
{
c=(1<<(a-1))+c;
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
document.getElementById(‘ansj‘).value=x.join("");
}
else
{
c=(1<<(a-1))+c;
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
document.getElementById(‘ansj‘).value=x.join("");
}
}
function fun11()
{
var s1,s2;
s1=document.getElementById(‘max‘).value;
s2=document.getElementById(‘x‘).value;
a=parseInt(s1);
b=parseInt(s2);
c=parseInt(s2);
var x=new Array();
if(c>=0)
{
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
}
else
{
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
}
var s3,s4;
s3=document.getElementById(‘max‘).value;
s4=document.getElementById(‘y‘).value;
a=parseInt(s3);
b=parseInt(s4);
c=parseInt(s4);
var t=new Array();
if(c>=0)
{
for(var i=a-1;i>=0;i--)
{
t[i]=(c & 1);
c >>=1;
}
}
else
{
for(var i=a-1;i>=0;i--)
{
t[i]=(c & 1);
c >>=1;
}
}
var ans=new Array();
var ansx=new Array();
var ansy=new Array();
var str=new Array();
for(var i=0;i<a;i++)
{
ans[i]=0;
ansx[i]=x[i];
ansy[i]=t[i];
}
for(var i=0;i<a;i++)
{
ans[i]+=ansx[a-1-i]+ansy[a-1-i];
if(ans[i]==2)
{
ans[i]=0;
ans[i+1]+=1;
}
else if(ans[i]==3)
{
ans[i]=1;
ans[i+1]+=1;
}
}
if(x[0]!=t[0])
{
alert(‘数据不会溢出,结果如方框所示‘);
if(ans[a-1]==1)
{
for(var i=0;i<=a-1;i++)
{
if(ans[i]==0)
ans[i]=1;
else
ans[i]=0;
}
ans[0]+=1;
for(var i=0;i<=a-1;i++)
{
if(ans[i]==2)
{
ans[i]=0;
ans[i+1]+=1;
}
else
break;
}
str[0]=‘-‘;
for(var i=a-2;i>=0;i--)
str[a-1-i]=ans[i];
document.getElementById(‘ansk‘).value=str.join("");
}
else
{
str[0]=‘+‘;
for(var i=a-2;i>=0;i--)
str[a-1-i]=ans[i];
document.getElementById(‘ansk‘).value=str.join("");
}
}
else
{
if(x[0]==0)
{
if(ans[a-1]==1)
alert(‘数据太大,产生正溢出!‘);
else
{
alert(‘数据不会溢出,结果如方框所示‘);
str[0]=‘+‘;
for(var i=a-2;i>=0;i--)
str[a-1-i]=ans[i];
document.getElementById(‘ansk‘).value=str.join("");
}
}
else
{
if(ans[a-1]==0)
alert(‘数据太小,产生负溢出!‘);
else
{
alert(‘数据不会溢出,结果如方框所示‘);
str[0]=‘-‘;
for(var i=0;i<=a-1;i++)
{
if(ans[i]==0)
ans[i]=1;
else
ans[i]=0;
}
ans[0]+=1;
for(var i=0;i<=a-1;i++)
{
if(ans[i]==2)
{
ans[i]=0;
ans[i+1]+=1;
}
else
break;
}
for(var i=a-2;i>=0;i--)
str[a-1-i]=ans[i];
document.getElementById(‘ansk‘).value=str.join("");
}
}
}
}
function fun12()
{
var s1,s2;
s1=document.getElementById(‘max‘).value;
s2=document.getElementById(‘x‘).value;
a=parseInt(s1);
b=parseInt(s2);
c=parseInt(s2);
var x=new Array();
if(c>=0)
{
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
}
else
{
for(var i=a-1;i>=0;i--)
{
x[i]=(c & 1);
c >>=1;
}
}
var s3,s4;
s3=document.getElementById(‘max‘).value;
s4=document.getElementById(‘y‘).value;
a=parseInt(s3);
b=parseInt(s4);
c=parseInt(s4);
var t=new Array();
if(c>=0)
{
for(var i=a-1;i>=0;i--)
{
t[i]=(c & 1);
c >>=1;
}
}
else
{
for(var i=a-1;i>=0;i--)
{
t[i]=(c & 1);
c >>=1;
}
}
for(i=0;i<a;i++)
{
if(t[i]==0)
t[i]=1;
else
t[i]=0;
}
t[a-1]=t[a-1]+1;
for(i=a-1;i>=0;i--)
{
if(t[i]==2)
{
t[i]=0;
t[i-1]=t[i-1]+1;
}
else
break;
}
var ans=new Array();
var ansx=new Array();
var ansy=new Array();
var str=new Array();
for(var i=0;i<a;i++)
{
ans[i]=0;
ansx[i]=x[i];
ansy[i]=t[i];
}
for(var i=0;i<a;i++)
{
ans[i]+=ansx[a-1-i]+ansy[a-1-i];
if(ans[i]==2)
{
ans[i]=0;
ans[i+1]+=1;
}
else if(ans[i]==3)
{
ans[i]=1;
ans[i+1]+=1;
}
}
if(x[0]!=t[0])
{
alert(‘数据不会溢出,结果如方框所示‘);
if(ans[a-1]==1)
{
for(var i=0;i<=a-1;i++)
{
if(ans[i]==0)
ans[i]=1;
else
ans[i]=0;
}
ans[0]+=1;
for(var i=0;i<=a-1;i++)
{
if(ans[i]==2)
{
ans[i]=0;
ans[i+1]+=1;
}
else
break;
}
str[0]=‘-‘;
for(var i=a-2;i>=0;i--)
str[a-1-i]=ans[i];
document.getElementById(‘ansl‘).value=str.join("");
}
else
{
str[0]=‘+‘;
for(var i=a-2;i>=0;i--)
str[a-1-i]=ans[i];
document.getElementById(‘ansl‘).value=str.join("");
}
}
else
{
if(x[0]==0)
{
if(ans[a-1]==1)
alert(‘数据太大,产生正溢出!‘);
else
{
alert(‘数据不会溢出,结果如方框所示‘);
str[0]=‘+‘;
for(var i=a-2;i>=0;i--)
str[a-1-i]=ans[i];
document.getElementById(‘ansl‘).value=str.join("");
}
}
else
{
if(ans[a-1]==0)
alert(‘数据太小,产生负溢出!‘);
else
{
alert(‘数据不会溢出,结果如方框所示‘);
str[0]=‘-‘;
for(var i=0;i<=a-1;i++)
{
if(ans[i]==0)
ans[i]=1;
else
ans[i]=0;
}
ans[0]+=1;
for(var i=0;i<=a-1;i++)
{
if(ans[i]==2)
{
ans[i]=0;
ans[i+1]+=1;
}
else
break;
}
for(var i=a-2;i>=0;i--)
str[a-1-i]=ans[i];
document.getElementById(‘ansl‘).value=str.join("");
}
}
}
}
</script>
</html>
标签:
原文地址:http://blog.csdn.net/enjoying_science/article/details/51335129