luolody 发表于 2004-5-15 00:09:03

关于存储变量的技巧

变数是用来存储数据的单元.RM的变数单元设置为10进制,0有效,MAX值为9999999.最大可设置变数单元为5000.每一个单元都被单独计数.每次对变数单元进行修改都会直接修改整个单元数值.

    如果在制作自制系统的时候大量使用变数池来储存数据,会出现变数存储单元短缺的情况.(比如我在制作的一个自制系统,如果单纯的使用变数,可能需要高达30000多个变数单元才能储存完所有的数据)这样的情况下变数单元变得十分紧俏.因为这样的原因而无法继续自制系统将是很烦人的结果.

    这里需要对数值编码作一些背景讲述.漫长社会生活中我们统一默认的是使用的十进制.在计算机语言中十进制的规则是从0开始,到9结束.当在累加1时,将低位置零,并向高位添加进位1.所以在十进制中,我们其实从来没有使用到单一的所谓的"十"这个数值.因为每次出现满足"十"的情况,都会根据规则进行进位处理.这个就是十进制的进位基本规则.

    计算机还常使用二进制,八进制,十六进制.二进制只有0,1;八进制只有0-7;十六进制有0-9,a=10,b=11,c=12,d=13,e=14,f=15,总共16个符号构成十六进制的每一位.十六进制的双位称为一个字节.八进制,十六进制都是在二进制的基础上建立起来的,二进制可以称作计算机的细胞.

    我们来看二进制的机理:1=(1);2=(10);3=(11);4=(100);5=(101);......

对于每一位来说,只存在两个基本状态,有(1)和无(0).计算机正是通过对高电位,低电位的比较确定量化1,0从而通过电路来进行运算,这个是它话了.当我们把一个有8位的二进制数值来做具体分析的时候可以看到





位数
8
7
6
5
4
3
2
1

位值
1
1
0
1
0
1
0
1

这个数据清楚的表明了位数的八个位置的状态从高到低分别为:有,有,无,有,无,有,无,有.实质上把这个8位二进制转化为双字节为0D5H.这个数据以最简约的方式存储记录了8个不同的位数的不同状态.

这个就是数值编码的最基本思想.让我们回到RM的变数中来,每一个变数单元MAX值为9999999,换算为二进制为100110001001011001111111.因为这个为最大值,二进制的次高位不可能再被置1.所以不能全部使用,放弃最高位.留下的23位为有效使用位.也就是说,一个变数单元可以存储23个位数的二选一状态值.

    当然这样使用,在提取变数单元数值时,将遇到编写大量的计算公式以提取目标位的状态值而显得冗长复杂.这个时候我们可以考虑将7位十进制分割为7个1位数值.9=(1001),取次高位为有效位,可以存储三个位数状态值.未使用的8(1000),9(1001)可以作为特殊的标志位留作他用,这样在提取变数单元数值时就可以方便的编写少量的换算方程就可以得到位数状态值.

    也许说到这里,有些刚刚接触rm的人还是不是十分明了.这里再把开关提出来做一个比较.开关有两个状态:开,关.我们可以定义为开=1,关=0,这样开关成为了一个只有一位的二进制体系.根据二进制规则,打开开关的操作就是对开关单元写入1,关闭开关的操作就是对开关单元写入0,更替开关就是对开关单元进行+1.因为根据二进制规则,1+1应该向高位进位,低位置零;0+1应该低位置1,因为开关是一位的二进制,没有高位可以进,所以进位操作被放弃,只记录下了低位的操作.这个也是计算机算法的一个基本思想.

    这样,我们就可以通过对一个固定的变数单元进行非十进制的换算编制,再利用多位的状态值来储存比原来更多的数据量.

    提供个人的一些换算编制:如果状态值为十进制的一位时,只是单纯的分割变数单元的位数来存储.

    如果状态值为二进制的一位时,对变数单元的位数进行一次写入三个状态值来储存的方式.编写相应的写入,提取算法公式.

    如果状态值为十进制的多位时,只要低于7位,就可以将变数单元分割来存储,剩余的位数可以用来存储其他的数值.

    关于编写相应的写入,提取算法公式,还是需要使用到变数单元,但是这个变数单元的作用应该是寄存器的作用,只是用作存储中间状态,并不用作存储数据.这些寄存器是不可以用作存储数据的.
写得好辛苦......

玄天 发表于 2004-5-15 00:38:31

得注上声明,不然会有人盗链~

焰都 发表于 2004-5-15 01:13:20

头晕。。。我对数字没辙- -

chaochao 发表于 2004-5-15 05:52:43

辛苦楼主了!
PS:长篇大论,我看的更辛苦......

瓜仔 发表于 2004-5-15 11:54:45

厉害!!

luolody 发表于 2004-5-15 22:31:49

可怜我们这些原创的.......双手不如ctrl+c......

512 发表于 2004-7-26 07:52:56

wasa119 发表于 2004-7-26 14:56:47

关于存储变量的技巧

感觉和高精度算法原理差不多
页: [1]
查看完整版本: 关于存储变量的技巧