~
(Aritmetik) operatörün tüm bitleri döndürür bu bitdüzeyi zıtlık operatörü olarak adlandırılır:
! ~ logical and bitwise negation
Böylece, bağlamın aritmetik olduğu yerlerde, tüm bitleri sıfır olarak içeren bir sayıyı tüm bitler gibi değiştirir. A $(( ~0 ))
, sayı gösteriminin tüm bitlerini (günümüzde genellikle 64 bit) herkese dönüştürür.
$ printf '%x\n' "$(( ~0 ))"
ffffffffffffffff
Hepsine sahip bir sayı, negatif sayı (ilk bit 1
) 1
veya basitçe olarak yorumlanır -1
.
$ printf '%x\n' "-1"
ffffffffffffffff
$ echo "$(( ~0 ))"
-1
Aynı şey diğer tüm sayılar için de geçerlidir, örneğin: $(( ~1 ))
tüm bitleri çevirir:
$ printf '%x\n' "$(( ~1 ))"
fffffffffffffffe
Veya ikili olarak: 1111111111111111111111111111111111111111111111111111111111111110
Hangi, ikisinin temsilinde bir sayı olarak yorumlanır:
$ echo "$(( ~1 ))"
-2
Genel olarak, insan matematik denklemi $(( ~n ))
eşittir$(( -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
Ve (sorunuz):
$ n=33 ; echo "$(( ~n )) $(( -n-1 ))"
-34 -34