~
(คณิตศาสตร์) ผู้ประกอบการพลิกทุกบิตจะเรียกว่าผู้ประกอบการปฏิเสธบิต:
! ~ logical and bitwise negation
ดังนั้นในสถานที่ที่บริบทเป็นเลขคณิตมันจะเปลี่ยนตัวเลขด้วยบิตทั้งหมดเป็นศูนย์เป็นบิตทั้งหมดเป็นบิต A $(( ~0 ))
แปลงบิตทั้งหมดของการแทนตัวเลข (โดยปกติแล้ว 64 บิตในปัจจุบัน) เป็นบิตทั้งหมด
$ printf '%x\n' "$(( ~0 ))"
ffffffffffffffff
จำนวนกับคนทั้งหมดจะถูกตีความเป็นตัวเลขเชิงลบ (บิตแรก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