您可能已经注意到,-2147483648 = -2 31 是带符号的32位整数范围的负限制。
当我尝试按字面意思使用这个值时......:
set /A -2147483648
...,发生以下错误:
Invalid number. Numbers are limited to 32-bits of precision.
但是,我可以毫无困难地说明正限制2147483647 = 2 31 - 1:
set /A 2147483647
那么为什么set /A
表现得那样,虽然这个数字完全在有符号的二进制补码32位整数的适用范围内?
有没有办法直接在set /A
表达式中声明常量-2147483648?
我知道,我可以使用预设为该值的变量,例如set NEGLIM=-2147483648
,然后以未扩展的方式使用它,例如set /A NEGLIM
,但是没有立即提供的方式这个值?
答案 0 :(得分:3)
我建议采用以下解决方法:
set /A -2147483647-1
结果:
-2147483648
有趣的说明:set /A -2147483647-2
会产生2147483647
,因此玩弄极限是危险的:)
答案 1 :(得分:2)
我刚刚发现一个有趣的事实:当使用十六进制表示时,可以给出负限制:
fwrite($file777, trim($file1[$f1])." ".trim($file2[$f2])." ".($file3[$f3]) );
或(由于两个补码表示,也导致-2147483648):
set /A -0x80000000
但是,八进制表示法与十进制表示法一样失败:
set /A +0x80000000