中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-16 04:02
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » cmd所能处理的最大数值 查看 792 回复 5
楼 主 cmd所能处理的最大数值 发表于 2008-05-29 11:52 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
&&cmd在数值处理上有个上限,于是写下了这段计算其最大处理值的代码,以利新手
以后的操作:

@echo off&setlocal enabledelayedexpansion
set a=1
:begin
set /a a*=2,n+=1
set n=%a%
if %a% lss 0 (
set /a n-=1
set a=!n!&goto again
)
goto begin
:again
set /a a+=1,n+=1
set n=%a%
if %a% lss 0 (
set /a n-=1
echo cmd所能处理的最大数值为:!n!。
pause>nul&goto :eof
)
goto again


[ Last edited by zw19750516 on 2008-5-29 at 12:08 PM ]
批处理之家新域名:www.bathome.net
2 发表于 2008-05-29 12:29 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
2^31是吧?
3 发表于 2008-05-29 16:01 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线

@echo off
set /a d=1^<^<31,x="~d"
echo cmd所能处理的最小数值为 %d%
echo cmd所能处理的最大数值为 %x%
pause>nul
致精致简!
4 发表于 2008-05-29 18:58 ·  中国 重庆 电信
初级用户
★★
积分 198
发帖 89
注册 2007-09-06 23:22
UID 96746
性别 男
来自 重庆
状态 离线
楼上的够简洁,学习了。
这点我感到不解:set /a d=^<^<30 当小于31的时候d的值是正数,而31的时候就变成负数了?
5 发表于 2008-05-29 22:22 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
Originally posted by WANKOILZ at 2008-5-29 06:58 PM:
楼上的够简洁,学习了。
这点我感到不解:set /a d=^<^<30 当小于31的时候d的值是正数,而31的时候就变成负数了?

32位的操作系统,能表示的符号数范围是:
负2的31次方 到 正2的31次方减1
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
WANKOILZ +1 2008-05-29 22:38
6 发表于 2008-05-29 22:38 ·  中国 重庆 电信
初级用户
★★
积分 198
发帖 89
注册 2007-09-06 23:22
UID 96746
性别 男
来自 重庆
状态 离线
了解了,感谢楼上的回答。
经测试, ~ 的作用好象是取相反数再减1。
论坛跳转: