Board logo

标题: [数值计算] 批处理十进制转二进制,帮忙找错 [打印本页]

作者: 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