set /a的逻辑运算功能的简单运用
bat吧
全部回复
仅看楼主
level 14
John▫Aº 楼主
RT
2013年12月14日 03点12分 1
level 14
John▫Aº 楼主
比较数字大小:
set /a "n=a>>31"
::当 a>0 时,n=0,否则为 -1
set /a"n=a-b>>31"
::当 a>b 时,n=0,否则为 -1
set /a"n=(a-b>>31)-(b-a>>31)"
::当 a>b 时,n=1,a=b 时,n=0,a<b 时,n=-1,此方法不存在特殊数字 0 的问题
2013年12月14日 03点12分 2
level 14
John▫Aº 楼主
判断一个数字是否为0
n=!a
::当 a=0 时,n=1,否则为 0
n=!!a
::当 a=0 时,n=0,否则为 1
2013年12月14日 03点12分 3
level 14
John▫Aº 楼主
比较大小的另一种实现方法:
n=!!(a/b)
::当 a>b 时,n=1,否则为 0,但是 b 不能为0
n=!(b/a)-!(a/b)
::当 a>b 时,n=1,a=b 时,n=0,a<b 时,n=-1
2013年12月14日 03点12分 4
level 14
John▫Aº 楼主

例子:
计算|a| (a的绝对值):
@echo off
:start
set /p a=请输入a的值:
set /a a="1+2*(a>>31)"
echo ^|a^|=%a%
goto start
2013年12月14日 03点12分 5
这个错了,看楼下。
2013年12月14日 03点12分
level 14
John▫Aº 楼主
@echo off
:start
set /p a=请输入a的值:
set /a a="1+2*(a>>31)*a"
echo ^|a^|=%a%
goto start
2013年12月14日 03点12分 6
下次还是先试一试再发吧,要加括号:set /a a="(1+2*(a>>31))*a"
2013年12月14日 03点12分
回复
敖文轩321
:格式错误
2017年04月21日 02点04分
回复
敖文轩321
:我教你set /a a=1+2*a">>"31*a
2017年04月21日 02点04分
level 14
John▫Aº 楼主
找点人来
@tmxk0411 @byaidu
2013年12月14日 03点12分 7
我呢
2013年12月14日 14点12分
level 14
John▫Aº 楼主
到了初三都没什么时间做大点的bat程序了。。。
2013年12月14日 03点12分 8
level 13
2013年12月14日 04点12分 9
level 13
我就用繁體,你能把我咋樣?
2013年12月14日 04点12分 10
level 13
喜闻乐见,实际用途有待考虑,不过支持下。
2013年12月14日 08点12分 11
level 12
话说set /a x=%random%%%5+1好像老是会重复几个数
2013年12月14日 14点12分 12
level 6
已入收藏夹。。
2013年12月28日 16点12分 13
level 13
你在哪?好久没见。。。
话说你的这个我又受益不浅啊 呵呵
2013年12月28日 23点12分 14
我在初三。。。好久没见。。。这种方法我在曰期计算时用过。
2013年12月29日 08点12分
回复 敖文轩321 :无语 。。。 我知道你是初三
2013年12月29日 08点12分
1