level 15
说几点意见:
取出一个数的某一位不需要这么麻烦,比如取十位数,这样写就可以:
a \ 10 Mod 10
前面除以10(注意斜线的方向)表示去掉最后一位(除以10的几次方就是去掉几位),后面再对10取余就表示取出最后一位数
如果取的是最高位,最后的Mod 10就不需要写了
然后,二进制的表示一般不用数值类型,而是用字符串,就是说你不要用CDbl转换成数值型(其实为什么要转换成浮点数类型呢?为什么不CLng呢),那么也就不能用数值运算的方法取位数了,需要改用Mid函数取出从左边数的第n位:
Mid(a, n, 1)
2020年05月05日 05点05分
3
那么请问从右往左怎么说呢
2020年05月05日 05点05分
@tzh654321 其实没有从右往左的必要;如果要从右往左也很简单:For i = Len(a) To 1 Step -1
2020年05月05日 06点05分
level 1
‘问题都解决了’
dim r,s,ar,da,db,dc,dd,de,df,dg,n,m,z,y
z="0000000"
do
r=clng(inputbox("请输入二进制数"))
n=7-len(r)
m=right(z,n)
y=m&r
da=Mid(y,1, 1)
db=Mid(y,2, 1)
dc=Mid(y,3, 1)
dd=Mid(y,4, 1)
de=Mid(y,5, 1)
df=Mid(y,6, 1)
dg=Mid(y,7, 1)
if (da<>1 and da<>0)or(db<>1 and db<>0)or(dc<>1 and dc<>0)or(dd<>1 and dd<>0)or(de<>1 and de<>0)or(df<>1 and df<>0)or(dg<>1 and dg<>0) then
msgbox("啥,这是二进制???")
exit do
end if
'msgbox(dg&"~"&df&"~"&de&"~"&dd&"~"&dc&"~"&db&"~"&da)'此条测试用,去掉此行开头的'可以恢复测试
msgbox(64*da
+3
2*db+16*dc+8*dd+4*de+2*df+1*dg)
loop
2020年05月05日 09点05分
6
赞一下这种解决了问题回来说一声的人。
2020年05月05日 10点05分
1.要“适配7位”,n和m的那两步计算是没必要的,直接y=right("0000000" & r,7)就可以了。2.要检查输入的是否是“合法2进制”,没必要那么长1串if的逻辑算式,一个简单的For循环检查y的每一位是否为0或1就行了。3.采用“2.”的方案之后,就建议是“先检查合法性、再分离每位的值”了。
2020年05月05日 12点05分