[자바스크립트/javascript] 이진수 관련 함수

1. toString(2)

정수를 이진수 형태의 문자열로 반환한다.

let num = 10
num.toString(2) // "1010"

2진수뿐만 아니라 8,10,16 등등도 가능
 
 
 
 

2. parseInt(bin,2)

let bin = "1010"
parseInt(bin,2) // 10

이진수 형태의 문자열을 10진수의 정수로 변환해 준다.
toString처럼 다른 진수도 가능. 만약 괄호에 2가 아닌 10을 넣는다면 1010이 나온다. (물론 숫자를 넣지 않으면 자동으로 문자 안의 숫자를 십진수로 파악하여 1010으로 반환됨)
 
 
 
 

3. 비트연산자

(1) & AND 논리 연산자

let dec1 = 10
let dec2 = 12
dec1 & dec2 // 8
십진수 이진수
10 1010
12 1100
8 1000

교집합이라고 생각하면 될 것 같다
둘 다 0이거나 서로 숫자가 다르면 0, 둘 다 1이면 1
 
 
 

(2) | OR 논리 연산자

let dec1 = 10
let dec2 = 12
dec1 | dec2 // 14
십진수 이진수
10 1010
12 1100
14 1110

합집합이라고 생각하면 될 것 같다.
한쪽이라도 1이 있으면 1, 둘 다 0이면 0
 
 
 

(3) ^ 배타 논리 연산자

let dec1 = 10
let dec2 = 12
dec1 ^ dec2 // 6
십진수 이진수
10 1010
12 1100
6 0110

둘 다 1인 곳을 걸러준다.
대칭차집합..?의 형태인 듯
 
 
 

(4) ~ NOT (부정) 논리 연산자

let dec = 10
~dec // -11
십진수 이진수
5 00000000000000000000000000000101
-6 11111111111111111111111111111010

1을 0, 0을 1로 반전시킨다.
JS의 음수 비트 표기법에 의해 음/양이 뒤바뀐다고 한다. 내가 참고한 블로그에 따르면 32비트 int를 기준으로 연산을 하기 때문이라고 함.
number * (-1) - 1 인 값이 나오는 듯
 
 
 

(5) << 왼쪽 시프트

let dec1 = 3
dec1 << 2 // 12
십진수 이진수
3 11
12 1100

<< 2 왼쪽으로 두 번 민다는 소리이다.
밀어진 공간에는 0이 채워지고 1100이 되어서 10진수로 12가 된다.
n칸 당 원래수*(2^n) 이 된다. 3에서 2칸을 밂 => 3(2^2)가 되어서 12가 된다.
 
 
 

(6) >> 오른쪽 시프트

let dec1 = 3
dec1 >> 1 // 1
십진수 이진수
3 11
1 1

 

십진수 이진수
5 101
2 10

왼쪽 시프트와 반대로 이진수를 오른쪽으로 밀게 된다.
밀어진 만큼 오른쪽부터 삭제됨.
 
 
 
 


참고링크
1. [🔗]
2. [🔗]
3. [🔗]

comment