-
Section 9. 자바스크립트 2, 8, 16진법과 비트 연산자자바스크립트 2023. 4. 6. 16:27
I. 다른 진법들
2진법 binary
0b 뒤로 숫자 0, 1를 붙여 표현하는 진법이다.
[ 0b1, 0b10, 0b11, 0b100, 0b101 ].forEach(i => console.log(i)) //1 //2 //3 //4 //5
2진법으로 forEach문을 돌렸지만 출력될 때는 10진법으로 표현이 된다.
표현을 달리 했을 뿐, 자바스크립트 내부에서는 같은 숫자로 인식한다.
8진법 octal
0o 뒤로 숫자 0~7를 붙여 표현하는 진법이다.
[ 0o7, 0o10, 0o100, 0o1000, ].forEach(i => console.log(i)) //7 //8 //64 //512
16진법 hexadecimal
0x 뒤로 숫자 0~9, A~F를 붙여 표현하는 진법이다.
[ 0x9, 0xA, 0xB, 0xC, 0xd, 0xe, 0xf, 0x10, 0xFFFFFF ].forEach(i => console.log(i))
진법 간 변환하는 방법
const num = 123456789; const binStr = num.toString(2); const octStr = num.toString(8); const hexStr = num.toString(16); console.log(binStr, octStr, hexStr); //111010110111100110100010101 726746425 75bcd15
console.log( parseInt(binStr, 2), parseInt(octStr, 8), parseInt(hexStr, 16) ); //123456789 123456789 123456789
이 외에도 2~36 사이의 진법 사용이 가능하다.
II. 비트 연산자들
let x = 0b1010101010; // 682 let y = 0b1111100000; // 992
const bitAnd = x & y; console.log(bitAnd); //672 console.log( bitAnd.toString(2) ); //1010100000
비트 AND 연산자는 x&y이다.
각 자리에서 한 자리씩 x 와 y를 비교하면서 둘 다 1이면 1을 반환하고 아니면 0을 반환한다.
const bitOr = x | y console.log(bitOr); //1002 console.log( bitOr.toString(2) ); //1111101010
비트 OR 연산자는 x|y이다.
각 자리에서 한 자리씩 x 와 y를 비교하면서 한 쪽이라도 1이면 1을 반환한다.
const bitXor = x ^ y; console.log(bitXor); //330 console.log( bitXor.toString(2) ); //101001010
비트 XOR 연산자는 x^y이다.
각 자리에서 한 자리씩 x 와 y를 비교하면서 어느 한쪽만 1일 때 1을 반환한다.
console.log(~x); //-683 console.log( (~x).toString(2) ); //-1010101011
각 비트를 반전시키는 연산자는 ~ 이다.
let x = 0b101; // 5 console.log(x.toString(2), x); //101 5
x = x << 1; console.log(x.toString(2), x); //1010 10
예시에서 x의 자릿수를 왼쪽으로 1만큼(한 자리수만큼) 옮겼다. 즉, 101에서 한자리만큼 왼쪽으로 옮기니까 뒤에 0이 붙어서 1010이 되는 것이다. 그리고 특이사항으로 왼쪽으로 값이 1칸 옮겨질 때마다 x의 값이 2배 증가한다.
x = x >> 1; console.log(x.toString(2), x); //10 2
예시에서 x의 자릿수를 오른쪽으로 1만큼 옮겼다. 즉, 101에서 10이 되는 것이다. 그리고 오른쪽으로 값이 1칸 옮겨질 때마다 x의 값이 반으로 감소한다.
>>, <<와 같은 연산자를 쉬프트 연산자라고 한다.
'자바스크립트' 카테고리의 다른 글
Section 9. 자바스크립트 Symbol (0) 2023.04.06 Section 9. 자바스크립트 BigInt (0) 2023.04.06 Section 8. 자바스크립트 Object 깊게 다루기 (JSON) (0) 2023.04.06 Section 8. 자바스크립트 Object 깊게 다루기 (프로퍼티 어트리뷰트) (0) 2023.04.06 Section 8. 자바스크립트 Object 깊게 다루기 (0) 2023.04.05