[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] 批处理十进制转二进制,帮忙找错

@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
请按任意键继续. . .

代码不止一行时,请用code把代码扩起来
如何用code把代码扩起来 http://bbs.bathome.net/viewthread.php?tid=404&highlight=code
技术问题请到论坛发帖求助!

TOP

当我看到你用了<<后 我就不想找错了..............
不用for 没必要延迟变量的吧

明显是溢出了
自己再看看吧
o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

TOP

但是我把!!改成%%后,照样输入2000.结果是错的
而输入1000,结果就是对的
溢出是什么?我用1"<<"11照样可以算出2048啊,没溢出啊

[ 本帖最后由 wnc1988 于 2009-10-7 22:12 编辑 ]

TOP

set运算 大于 2147483647 就溢出啊  所以 你还是取余了

TOP

恩,谢谢terse及各位大大。
对于byte这个变量没必要用数学运算

TOP

返回列表