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

批处理set命令计算

@echo off
set /a d=1^<^<31,x="~d"
echo cmd所能处理的最小数值为 %d%
echo cmd所能处理的最大数值为 %x%
pause>nul

问一下1^<^<31,x="~d"中的是不是1<<31 意思   还有"~d"
还有问一下
@echo off
title 计算两个数字之和
set /a num1=%~1 %======这里是从外部传入的第一个参数======%
set /a num2=%~2 %======这里是从外部传入的第二个参数======%
set /a res=%num1%+%num2%
echo %num1%+%num2%=%res%
pause>nul
和@echo off
title 计算两个数字之和
set /a num1=%1%======这里是从外部传入的第一个参数======%
set /a num2=%2%======这里是从外部传入的第二个参数======%
set /a res=%num1%+%num2%
echo %num1%+%num2%=%res%
pause>nul
又有什么不一样  在什么时候不一样呢
ss

就楼主的问题,我来简单讲解下吧:
1 set /a d=1^<^<31
 首先我们要明白这是个二进制表达式,在二进制中只有0和1两个字符,而且逢2进一位,
而在set  /a中"<<"和">>"是表示逻辑移位的,"<<"表示逻辑左移位,">>"表示逻辑右移位,
因此set /a d=1^<^<31(其中^转义符)就是表示将1字符罗辑左移位31位后的值赋与变量b,
而在二进制中将1逻辑左移位2位得到的数值为:100就是十进制中的4,罗辑称位4位得到
的数值为:10000就是十进制中的16,而罗辑移位31位后就超出了cmd所能处理的最大正
整数因而就变成了-2147483648,也就是cmd所有处理的最小负整数。
2 set  /a x=~d
 其中的"~"表示数值取反(正变为负,负变为正),但这个取反是将d加上1后再进的取
反,如set /a a=~-23后输出的值为22。
3 两个程序的区别
 %~1的意思就脱去参数中的双引号" ",当然在参数没有加引号的情况下是没有区别的,
但一旦外界传递过来的参数中含有双引号时,第一个能正常运算,第二个是肯定会出错的,
楼主可以自己测试一下。
***共同提高***

TOP

回复 2楼 的帖子

谢谢 版主   明白了  呵呵  版主我是学生   我以后能不能有问题问你一下  你可不可以帮我一下  啊  呵呵
ss

TOP

set/a 的逻辑运算,除非批处理是专门的数值计算,分解,开方,数列输出等 否则感觉用处不是很大。
心绪平和,眼藏静谧。

TOP

返回列表