ASP心得(二进制转10进制)[第一篇]

本文介绍了ASP中将二进制转换为十进制的算法实现过程,通过循环处理二进制数的每一位,利用Mid()函数结合位数权重进行转换。在代码实现中,特别注意了0^0等于1的特殊情况,并解决了位数方向与Mid()取值方向相反的问题,最终通过累加变量m实现了结果的正确计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<%
a=01101110'八位2进制数,随便改
b=Len(a)
m=0
For i = -b to -1
d=mid(a,i+b+1,1)
c=(d*2)^(abs(i)-1)
If (abs(i)=1) And (d=0) Then'因为0^0为1,但实际我们需要0
response.write c-1&"="
elseif abs(i)=1 Then
response.write c&"="
Else
response.write c&"+"
End if
If (abs(i)=1) And (d=0) Then'这个是运算结果用的,是一样的,我们需要0,多了一个1,键去它
m=m+c-1
Else
m=m+c
End If
next
response.write (m)
%>
这是一个2进制转十进制的代码
一开始老出现错误,发现
Mid()和Len()函数只有在左起不为零的一位数才开始算第一位,依次类推Left()与Right()也应该如此
进行更正后,第一个Mid(a,1,1)就不是第八位了,不过影响不大
自己总结得出进制某位数大小
应为其值乘以进制值的位数减一次方
比如十进制
10二位
进制值为10
那么十进制转十进制就为
1*(10^(2-1))其他位数均为如此
比如111
就是1*100+1*10+1*1
100是(10^(3-1))等等
二进制001就是
0*4+0*0+1*1
根据这个编出上面的算法
但是遇到了问题
我们的循环是位数从高到低
但是Mid()取出的值是从左算起
找了半天发现循环不能同时提两个条件
比如
for i=-6 to -1:m=1 to 6
就不行
结果还是根据一个简单的加法
i+b+1
i在一直变小,那么整个结果就一直增大,就解决位数值与位数方向相反的问题了
(因为越往左位数越大,但是 Mid()是从左开始取的
i只能一个既要满足位数的方次不断编小,还要满足mid()里不断变大来实现一直向右伸展)
下面发现0^0竟然为1
也就是二进制第一位是0时
(0*2)(1-1)
就为1,但实际为零
所以编了if条件实现特殊情况特殊处理
最后就是连加的问题
我一直想不出怎么实现在循环语句累计连加
如果m=c+c那么是很可怕的
而且不能连加,c会每次都被重新赋值
但是我想到m可以实现
每次m被赋值是累计的,他不属于循环变量
那么一开始m=0
第一次循环m=+mc=0+64
第二次循环就m=64了 m=m+c=64+32
就这样实现连加
还有我给m赋值是在循环语句之外,这样在循环结束时
就可以在流程外输出连加最总值
你不信可以放进循环里看看
他就成了局部变量而不是全局变量

回复:[原创]ASP心得集
其实我编麻烦了
当时也许昏头了
不要什么If条件
因为
c=(d*2)^(abs(i)-1)
有问题
应该是
c=d*2^(abs(i)-1)
那么只要一个If判断末尾不用+而是=就可以了
简化后是
<%
a=10100110
b=Len(a)
m=0
For i = -b to -1
d=mid(a,i+b+1,1)
c=d*2^(abs(i)-1)
If abs(i)=1 Then
response.write c&"="
Else
response.write c&"+"
End if
m=m+c
next
response.write (m)
%>
这样简单多了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值