~
(연산) 운영자는 모든 비트를 플립 그것이 비트 부정 조작이라고 :
! ~ logical and bitwise negation
따라서 문맥이 산술적 인 곳에서는 모든 비트가 0 인 숫자를 모든 비트가 1 인 숫자로 변경합니다. 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