标题:
[数值计算]
批处理十进制转二进制,帮忙找错
[打印本页]
作者:
wnc1988
时间:
2009-10-7 02:48
标题:
批处理十进制转二进制,帮忙找错
@echo off&setlocal EnableDelayedExpansion
set k=11
set /p n=请输入一个小于2048的整数:
set m=%n%
set /a byte=0
:a
set /a s=1"<<"!k!
set /a k=!k!-1
if !n! geq !s! (
set b=1
set /a n=!n! %% !s!
set /a byte=10*!byte!+!b!
) else set /a b=0&set /a byte=10*!byte!+!b!
if !k! lss 0 goto b
goto a
:b
echo %m% =!byte!
pause
为什么我输入2000的时候就会出错呢?
请输入一个小于2048的整数:2000
2000 =-1773891888
请按任意键继续. . .
作者:
随风
时间:
2009-10-7 07:17
代码不止一行时,请用code把代码扩起来
如何用code把代码扩起来
http://bbs.bathome.net/viewthread.php?tid=404&highlight=code
作者:
基拉freedom
时间:
2009-10-7 20:49
当我看到你用了<<后 我就不想找错了..............
不用for 没必要延迟变量的吧
明显是溢出了
自己再看看吧
作者:
wnc1988
时间:
2009-10-7 22:01
但是我把!!改成%%后,照样输入2000.结果是错的
而输入1000,结果就是对的
溢出是什么?我用1"<<"11照样可以算出2048啊,没溢出啊
[
本帖最后由 wnc1988 于 2009-10-7 22:12 编辑
]
作者:
terse
时间:
2009-10-7 23:42
set运算 大于 2147483647 就溢出啊 所以 你还是取余了
作者:
wnc1988
时间:
2009-10-8 11:28
恩,谢谢terse及各位大大。
对于byte这个变量没必要用数学运算
欢迎光临 批处理之家 (http://bbs.bathome.net/)
Powered by Discuz! 7.2