三、用set 命令进行简单计算
格式:set /a expression
/a 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式评估器很简单并以递减的优先权顺序支持下
列操作:
( ) 分组
! ~ - 一元运算符
* / % 算数运算符
- 算数运算符
<<>> 二进制逻辑移位
& 二进制按位“与”
^ 二进制按位“异”
| 二进制按位“或”
= *= /= %= = -= 算数赋值
&= ^= |= <<=>>= 二进制运算赋值
, 表达式分隔符
set 的/a 参数就是让set 可以支持数学符号进行加减等一些数学运算, 注意:一般的运算常为十进制运算.
例12,
@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
请按任意键继续. . .
我们来看一看下面的这个例子
例13,
@echo off
set /a a=1 1,b=2 1,c=3 1
echo 计算结果:%a% %b% %c%
pause
执行显示:计算结果:2 3 4
发现其他数学运算也有效果!,这就是表达式分隔符"逗"号的作用!
有时候我们需要直接在原变量进行加减操作就可以用这种语法,
set /a var =1对应原始语法就是set /a var = %var% 1
set /a var*=2对应原始语法就是set /a var = %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
注意:凡是按位计算均需换算成二进制,然后再计算。
思考题:求2 的n 次方
参考答案:
例14,
@echo off
set /p n=请输入2 的几次方:
set /a num=1^<^<n
echo %num%
pause
想一下这个到底是怎么运算的?呵呵,这就留给大家思考了!
Tags:setp