-
23.01.05 bit 단위 연산 ~(틸드)와 음수의 표현법, 아스키코드개발 이야기/TIL 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글자
'개발 이야기 > TIL' 카테고리의 다른 글
23.01.10 python list와 2차원 배열 (0) 2023.01.11 23.01.06 python 다양한 진수(2진수, 8진수, 16진수) 표현하기 (0) 2023.01.06 23.01.04 python format, map, bit shift 연산 (0) 2023.01.04 23.01.03 python for loop (1) 2023.01.04 23.01.02 python print (0) 2023.01.02