알고리즘

[자료구조] 진법변환, 비트연산

파뱁 2022. 3. 3. 00:42
728x90

진법 변환은 10진법, 2진법 등의 수를 다른 진법의 수를 바꾸는 것을 의미한다.

우리는 일반적으로 10진법을 사용하고, 컴퓨터는 0과 1로 이루어진 2진법을 이용한다.

이것을 변환하는 것도 진법변환이라고 부른다.

 

기본적으로 진법을 변환할 때는 나눗셈연산과 곱셈연산을 이용한다.

예를 들어 2진수인 111을 10진수로 변환할 때는 1*2^2 + 1*2^1 + 1*2^0 = 7 이 되고,

반대로 10진수인 7을 2진수로 변환할 때는 7//2,  (7/2)//2,  7/2/2 => 111 이 된다.

 

파이썬 기준으로 n진수에서 10진수로 변환할때는 int()를 사용하면 된다.

int(string, 진법)

이런 형식으로 사용하면 된다. string에는 변환하고자 하는 n진수 수를 문자열 형태로 넣으면 되고, 그 뒤에는 n진수의 n값을 숫자로 넣으면 된다.

예를 들면 이런 식이다.

int('111',2)
int('1111',16)

 

10진수를 2,8,16진수로 바꿀 때는 bin(), oct(), hex()를 사용할 수 있다. 참고로 리턴값은 string이다.

bin(10)
oct(10)
hex(10)

이런식으로 사용하면 된다.


비트연산은 2진수에 대해 비트 단위로 적용되는 연산을 말하는데,

AND, OR, NOT, XOR 등이 있다.

 

AND는 각 자리수를 비교해서 둘다 1일경우 1, 아니면 0을 반환한다.

1101 AND 1001 은 1001 이 되는 것이다.

 

OR은 각 자리수를 비교해서 둘다 0일경우 0, 아니면 1을 반환한다.

1101 OR 1001 은 1101 이 되는 것이다.

 

NOT각 자리에 있는 수가 1일 경우 0, 0일 경우 1로 바꾸어 반환한다.

하지만 단순히 바꾸는 것만을 생각하면 안된다.

2진수의 음수 개념때문에 원 숫자에 1을 더한뒤 부호를 바꿔주어야 한다.

NOT 1101은 1101 -(+1)-> 1110 -(마이너스 부호 붙이기)-> -1110 이므로 최종적으로 -1110이 된다.

 

XOR은 각 자리수를 비교해서 다르면 1, 같으면 0을 반환한다.

1101 XOR 1001 은 0100 이 되는 것이다.

728x90
반응형