개발 이야기/TIL

23.01.05 bit 단위 연산 ~(틸드)와 음수의 표현법, 아스키코드

혁진 2023. 1. 6. 12:44

비트단위(bitwise) 연산자 ~: tilde, 틸드라고 읽는다 

비트단위 연산자는 bit를 0 ->1로 혹은 1->0으로 바꾸어준다. 

예를 들어 십진수 1은 2진수로 바꾸면  00000000 00000000 00000000 00000001 이다.

이를 ~1로 비트단위로 연산자로 바꾸어주면 11111111 11111111 11111111 11111110 이 된다. 

이는 -2이다. 

그 이유는 음의 정수는 "2의 보수 표현법"으로 저장되기 때문이다. 

 

#음수의 표현 방법

음수의 표현방법은 크게 3가지이다. 

1. 부호비트 사용: 최상위 1비트를 부호를 사용하는데 이용

2. 1의 보수법: 해당양수의 모든 비트를 반전하여 음수로 표현하는 방법 -> ~를 사용한다고 생각하면 편함

  즉, 위의 1의 예시에서 ~1이 -2가 아닌 -1을 의미한다고 생각하면 된다. 

 

다만, 위의 2가지 방법 모두 +0과 -0, 즉 2개의 0이 존재하게 된다.

3. 2의 보수법

2의 보수법은 1의 보수법에다가 1을 더하여 음수를 표현하는 방법이다.

이 방법을 사용하면 2의 보수를 구하는 과정에서 오버플로우가 발생해 -0이 +0으로 표현된다.

예시를 들면 다음과 같다. 

+5 -> 00000000 00000000 00000000 00000101

-5 ->  11111111   11111111   11111111   11111011 

0 -> 1 00000000 00000000 00000000 00000000

즉 맨앞의 1은 오버플로우되어 0이 하나만(+0) 존재할 수 밖에 없다.

 

현재 대다수 시스템에서는 2의 보수법을 채택한다고 한다. 

 

 # ~연산은 int에서만 가능하다 

# bit 단위 연산과 아닌 것을 잘 구분하자

** 비트단위(bitwise)연산자는 아래와 같다
~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor),
<<(bitwise left shift), >>(bitwise right shift)

 

추가:

아스키 코드표이다. 기억하면 좋은건 A: 65, a: 97, 알파벳은 25글자