Operator ~
(aritmatika) membalik semua bit , itu disebut operator negasi bitwise:
! ~ logical and bitwise negation
Jadi, di tempat-tempat di mana konteksnya adalah aritmatika, ia mengubah angka dengan semua bit sebagai nol menjadi semua bit. A $(( ~0 ))
mengkonversi semua bit dari representasi angka (biasanya 64 bit saat ini) ke semua yang ada.
$ printf '%x\n' "$(( ~0 ))"
ffffffffffffffff
Angka dengan semua yang ditafsirkan sebagai angka negatif (bit pertama 1
) 1
, atau sederhana -1
.
$ printf '%x\n' "-1"
ffffffffffffffff
$ echo "$(( ~0 ))"
-1
Hal yang sama terjadi pada semua angka lainnya, misalnya: $(( ~1 ))
membalik semua bit:
$ printf '%x\n' "$(( ~1 ))"
fffffffffffffffe
Atau, dalam biner: 1111111111111111111111111111111111111111111111111111111111111110
Yang, ditafsirkan sebagai angka dalam representasi dua adalah:
$ echo "$(( ~1 ))"
-2
Secara umum, persamaan matematika manusia $(( ~n ))
adalah sama dengan$(( -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
Dan (pertanyaan Anda):
$ n=33 ; echo "$(( ~n )) $(( -n-1 ))"
-34 -34