自己实现的原码、反码、补码、移码的表示与加减运算软件

项目背景:这是我在大二上计算机组成原理这门课时,老师布置了一个课外作业(可以加分),她的要求是做一个能实现原码、反码、补码、移码的表示以及模仿计算机补码做加减运算功能的网络版软件。为了加平时分,于是我用一周的时间粗略地自学下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>

时间: 05-05

自己实现的原码、反码、补码、移码的表示与加减运算软件的相关文章

原码-反码-补码-移码

数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为 127~(-127) 原码-反码-补码-移码 原码 :二进制(开头第一个表示符号0正1负) 反码 :在原码的基础上,符号位不动,其他位取反 补码 :在反码的基础上,运算+1 移码 :在补码的基础上,符号位取反 101011(二进制)--> 原码 00101011 --> 反码 01010100 --> 补码 01010101--&

计算机中的原码,反码,补码与移码

在计算机内,定点数有3种表示法:原码.反码和补码. 原码:就是二进制定点表示法,即最高位为符号位,0表示正,1表示负,其余位表示数值的大小 反码:正数的反码与其原码相同:负数的反码是对其原码逐位取反,但符号位除外.       原码10010=反码11101(10010,1为符号位,故为负) 补码:正数的补码与原码相同,负数的补码是对其原码逐位取反,但符号位除外,然后整个数加1 如果补码的符号位为0,则表示一个正数,其原码就是补码如果补码的符号位为1,则表示一个负数 移码:移码与补码的关系: [

计算机基础知识_原码反码补码

一.原码,反码,补码 1.原码 比如一个二进制数字 最高位是0,(0代表正数) 0010 1000 那么原码就是0010 1000 反码: 0010 1000 补码: 0010 1000 都是一样的,这个二进制数字的10进制是40 所以是正数 正数的原反补都是一样的 2.反码 反码就是原码的取反,二进制的 0变为1 1变为0 ,看最高符号位是0 还是1,如果是1,则你要0变为1,1变为0, 3.补码: 负数的的是原码 取反 在加1 变成补码(二进制数) 正数的原码 加上负数的补码就等于是做减法运

java基础:原码反码补码

计算机在操作的时候,都是采用数据对应二进制的补码来计算的: 原码 反码 补码 原码:用原码,反码,补码来分别表示+7,和-7. 首先得到7的二进制:111

原码, 反码, 补码 详解

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计

[转]原码, 反码, 补码 详解 很全

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计

关于原码, 反码, 补码的复习

原本大一时考试90+的组成原理,隔了太长时间没使用,概念也慢慢模糊了,由于最近考试的基础知识有可能用到,于是,在网上找些资料,整理成这个文章,方便以后某天回来看看,好记性真不如烂笔头. 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011.如

原码 反码 补码 以及 为什么要使用原码反码补码

原始博文网址,无意侵权,只是想记下来以后复习的时候方便, http://www.cnblogs.com/cumtchw/p/4523332.html http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html 机器数 一个数在计算机中的二进制表示形式,叫做这个数的机器数,机器数是带符号的,在计算机中用一个数的最高位存放符号,正数为0,负数为1,比如,十进制中的+3,假设计算机字长为8位,转换成二进制就是0000 0

[C++基础]原码/反码/补码、二进制位运算

原码/反码/补码 编码 定义 实例 原码 最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小. [+100]原=01100100 [+0]原=00000000 [-100]原=11100100 [-0]原=10000000注意:在原码中,零有两种表示形式. 反码 正数的反码与其原码相同:负数的反码是对其原码逐位取反,但符号位除外. [+100]反=01100100 [+0]反=00000000 [-100]反=10011011[-0]反=1111111

详解 原码, 反码, 补码

本篇文章讲解了计算机的原码, 反码和补码. 并且深入探求了为何要使用反码和补码, 以及更进一步论证了为何可以用反码和补码的加法计算原码的减法. 论证部分如有错误请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机中用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机字长为8位