>> -二进制逻辑移位 -二进制按位“与” ^ -二进制按位“异” | -二进制按位“或” = *= /= %= += -=-算数赋值 = ^= |= <<= >>=-二进制运算赋值 , -表达式分隔符 如果 SET /A 在命令脚本外的命令行执行的,那么它显示该表达式的最后值。 除十六进制有 0x 前缀, 八进制有 0 前缀的,数字值为十进位数字。 因此, 0x12 与 18 和 022相同。请注意八进制公式可能很容易搞混: 08 和 09 是无效的数字,因为 8 和 9 不是有效的八进制位数。 上面这些是系统帮助里的内容,看着是不是有点晕,没关系我来简单解释一下: set的/A参数就是让SET可以支持数学符号进行加减等一些数学运算! 注意:一般的运算常为十进制运算,如果数字字符串最左边为0,将被认为是八进制,从而出错。比如,0812之类的数字不能参与十进制运算,转换方法为:10812-10000 例: set aa=0812 set /a aa=1%aa%-10000 echo %aa% 结果为:812例: @echo off set /p input=请输入计算表达式: set /a var=%input% echo 计算结果:%input%=%var% pause 上面的例子是龙卷风设计的,很好用哟,请看下面几个运算过程: 注意:DOS计算只能进行整数运算,精确到整数 请输入计算表达式:1+9+20+30-10 计算结果:1+9+20+30-10=50 请按任意键继续. . . 请输入计算表达式:10/3#除法只能精确到整数 计算结果:10/3=3 请按任意键继续. . . 请输入计算表达式:-100+62#负数 计算结果:-100+62=-38 请按任意键继续. . . 请输入计算表达式:100%3#求余数 计算结果:100%3=1 请按任意键继续. . . 注意:以上的求余数运算符%在批处理程序中必须写成%% 请输入计算表达式:(25+75)*2/(15+5) #括号 计算结果:(25+75)*2/(15+5)=10 请按任意键继续. . . 请输入计算表达式:1234567890*9876543210 #范围 无效数字。数字精确度限为 32 位。 计算结果:1234567890*9876543210= 请按任意键继续. . . 注意:上面的计算过程显示,DOS计算只能精确到32位,这个32位是指二进制32位,其中最高位为符号位(0为正,1为负),低位31位为数值。31个1换成十进制为2147483647,所以DOS计算的有效值范围是-2147483648至2147483647,超出该数值范围时计算出错,请看下面的计算过程: 请输入计算表达式:2147483647-1#最大值减1,值有效 计算结果:2147483647-1=2147483646 请按任意键继续. . . 请输入计算表达式:2147483647+1#最大值加1,出错,结果为最小值 计算结果:2147483647+1=-2147483648 请按任意键继续. . . 请输入计算表达式:-2147483648-1 #最小值减1,出错,结果为最大值 计算结果:-2147483648-1=2147483647 请按任意键继续. . . 运行set /a a=1+1,b=2+1,c=3+1后会显示一个4,但我们用 echo %a% %b% %c%后看结果,会发现其他数学运算也有效果!,这就是表达式分隔符\"逗\"号的 作用! 有时候我们需要直接在原变量进行加减操作就可以用这种语法 set /a var+=1这样的语法对应原始语法就是set /a var = %var% + 1 都是一样的结果,在原变量的值上在进行数学运算,不过这样写简单一点 再来一个: set /a var*=2 其他都这么用,只要帮助里有这个语法! 另外还有一些用逻辑或取余操作符,这些符号,按照上面的使用方法会报错的 比如我们在CMD里输入set /a var=1 1 \"与运算\",他并不会显示为1,而是报错, 为什么?对于这样的\"逻辑或取余操作符\",我们需要把他们用双引号引起来,也可以用转义字符^,看例子 set /a var= 1 \"\" 1 这样结果就显示出来了,其他逻辑或取余操作符用法 set /a var= 1 \"+\" 1 异运算 set /a var= 1 \"%\" 1取模运算 set /a var= 3 \"<<\" 2 左移位运算, 3的二进制为11,左移2位为1100,换成十进制就是12,自行验证 set /a var= 4 \">>\" 2右移位运算,4的二进制为100,右移动2位为1,结果为1 龙卷风补充:凡是按位计算均需换算成二进制。 |