parseInt와 toString은 숫자를 진법으로 변환하는 함수이다.
이러한 진법을 표기하는 방법이 있는데,
2진법은 0b, 8진법은 0o, 16진법은 0x를 사용하는 것이다.
해당 표기법의 타입은 number이다.
해당 연산자는 비트를 연산하여 10진법의 숫자로 반환한다.
⚪ 비트 연산자
컴퓨터는 32비트 2진법으로 구성되어 있기 때문에 0과 1로 구성된 비트로 연산이 진행된다.
비트 연산을 통해, 새로운 비트를 만들고 10진법으로 반환한다.
⚫ &
같은 위치에 있는 비트를 비교해서 둘 다 1일 경우에 1로 치환하고, 이외에는 0으로 치환한다.
⚫ |
같은 위치에 있는 비트를 비교해서 하나라도 1일 경우 1로 치환한다.
⚫ ^
같은 위치에 있는 비트를 비교해서 같은 값일 경우 0 아닐 경우 1로 치환한다.
⭐ ~
비트가 1일경우 0으로, 0일 경우 1로 치환한다.
하지만 보이는 것은 10진수 이며, 5일경우 ~5를 해서 -6이 나오는 이상한 결과값을 보게 된다.
이 이유는, 컴퓨터는 음수를 인지하지 못하기 때문에 치환을 한 결과값이 음수가 나왔을 경우 2진법으로 사용자에게 보여주기 위해 -(x+1) 공식을 하기 때문이다.
<내부절차>
1. 비트를 치환한다 -> 앞자리가 1이 나오면 음수인데, 컴퓨터는 음수를 표현하지 못한다.
2. 음수를 표현을 2진법으로 하기 위해 2의 보수를 취해서 표기하게 되는데 그 공식이 -(x+1) 공식이다.
3. 따라서, 우리에게 보여질 때 2진법일 때 1010일 경우 -1011, 10진법 5일 경우 -6의 결과값이 보여지게된다.
⚫ >> , <<
비트를 0을 추가한다.
<< 일 경우 오른쪽 인자만큼 비트가 추가된다.
>> 일 경우 오른쪽 인자만큼 비트가 줄어든다.
공부를 할 때, 치환되는 부정연산자 ^는 사용이 되지 않는다고 해서 깊게 다뤄주지 않았았는데, 그래서 구글링을 하는데 많은 시간을 썼던 것 같다.
결국은 2의 보수를 취한다는 것이였는데, 왜 저러한 공식이 됬는지는 이해가 됬으나 보수의 개념을 정확히 이해하는데는 아직 무리가 있는 것 같다.
개발을 하는데 CS지식이 필요하다는 것이 아마 이러한 상황에서 나온 말 인 것 같다.
개발 언어 뿐만 아니라 CS공부의 필요성을 느끼게 되었다.