批处理里面的数值计算功能较弱,只能够进行整型计算,忽略浮点数的小数部分;同时数值计算的范围也受限于系统位数,对于目前较为常见的32位机来说,数值计算能处理的数值范围为0x80000000h~0x7FFFFFFFh
,即-2147483648~+2147483647
。
数值计算需要使用set
命令,具体格式为set /a expression
。其中,expression
代表计算表达式,计算表达式跟C语言里面的表达式基本上完全一致。set支持的运算符也跟C语言里面的一样,只是没有了増一减一。set支持的运算符及优先级排序如下:
|---------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13
| ========================================= () - 分组 ! ~ - - 一元运算符(逻辑非、按位非、取负) * / % - 算数运算符(乘、除得商、除得余数,即取余) + - - 算数运算符(加、减) << >> - 逻辑移位(左移一位、右移一位) & - 按位"与" ^ - 按位"异" | - 按位"或" = *= /= %= += -= - 赋值 &= ^= |= <<= >>= , - 表达式分隔符(set可一次处理多个表达式) =========================================
|
我们知道,批处理中取变量的值是需要用%
或者!
的,而在set /a
中,直接用变量名称即可取得变量的值。另外,set
支持八进制(数字前缀0)、十进制(数字无前缀)和十六进制(数字前缀0x),且支持不同进制之间的计算,如set /a a=123+0123+0x123
,计算及显示结果为十进制。