是 2 的力量
$ ispow2() { return $((!($1!=0&&($1&$1-1)==0))); }
$ i=0
$ while [ $i -lt 100 ]; do
> if ispow2 $((i=i+1)); then
> echo $i
> fi
> done
1
2
4
8
16
32
64
$1!=0
0 不是 2 的幂。
($1&$1-1)==0
取消最低位 。如果它是唯一的那么数字是 2 的幂。
额外的 !
用于将值修正为 shell 所期望的值,这与传统的真/假值相反(零为真,非零为假,零为假,非零为真)。