该~
(算术)运算符翻转所有位,它被称为按位否定操作:
! ~ logical and bitwise negation
因此,在上下文是算术运算的地方,它将所有位都为零的数字更改为所有位为1的数字。A $(( ~0 ))
将数字表示形式的所有位(如今通常为64位)转换为全1。
$ printf '%x\n' "$(( ~0 ))"
ffffffffffffffff
全为1的数字被解释为负数(第一位1
)1
,或简称为-1
。
$ printf '%x\n' "-1"
ffffffffffffffff
$ echo "$(( ~0 ))"
-1
所有其他数字也一样,例如:$(( ~1 ))
翻转所有位:
$ printf '%x\n' "$(( ~1 ))"
fffffffffffffffe
或者,以二进制形式: 1111111111111111111111111111111111111111111111111111111111111110
以二进制表示形式解释为数字的是:
$ echo "$(( ~1 ))"
-2
一般来说,人类的数学方程$(( ~n ))
等于$(( -n-1 ))
$ n=0 ; echo "$(( ~n )) $(( -n-1 ))"
-1 -1
$ n=1 ; echo "$(( ~n )) $(( -n-1 ))"
-2 -2
$ n=255 ; echo "$(( ~n )) $(( -n-1 ))"
-256 -256
并且(您的问题):
$ n=33 ; echo "$(( ~n )) $(( -n-1 ))"
-34 -34