sitelink1 http://blog.naver.com/tomatoalive?Redire...0116358702 
sitelink4 http://1 
extra_vars4 ko 
extra_vars6 sitelink1 
자바스크립트에서 숫자형은 크기를 지정할 수가 없습니다. 8bit char 형 이라던가 32bit int 형 이라던가 하는것들 말입니다. 개발자 입장에서는 잘 쓰면 그만인 것이지만 조금만 자세히 들여다 보면 여간 신기한 것이 아닙니다. 그것은 바로 음수 때문인데요, 잘 아시는 바와 같이 signed char 의 첫번째 Bit 는 숫자의 부호를 뜻하며 1이면 음수이고 0이면 양수입니다.
 
자 그렇다면... 0xff 0xffff 0xffffffff 는 모두 -1 입니까? 설마요... 안타깝게도 자바스크립트에서는 signed, unsigned 구분을 임의로 할수가 없기 때문에 어떤 규칙을 만들어야 했을겁니다. 한번 살펴 보도록 하죠.
 
제가 64비트 운영체제에서 자바스크립트를 실행해 본 경험이 없어서 단언하기는 어렵습니다만, 일단 32비트 운영체제에서는 비트연산 과정에서 32비트중 첫번째 비트가 1이 되면 음수입니다. 그런데 비트연산이 아닌 더하기와 곱하기로 인한 결과인 경우에는 음수가 아닙니다. 어찌보면 당연한 것이죠. 사칙 연산은 비트들을 직접 건드린다기 보다 다른 공간에서 계산한 결과를 보여주는 것이라고 생각합니다. 비트연산이 빠른 이유도 그런것 아니겠습니까?
 
이제 c 언어에서는 볼수 없었던 >>> (Unsigned Right Shift) 연산자가 등장하게 됩니다. ㄷㄷㄷ. 이건 뭔가요. 반대로 >> 연산자는 어떻게 다른건가요? c 언어에 익숙한 개발자들에게 치명적인 실수를 유도할지도 모르는 중요한 대목입니다. 제가 이 글을 포스팅 하게 된 이유이기도 하구요.
 
>>> (Unsigned Right Shift) 부호를 무시하고 비트를 오른쪽으로 이동시킵니다. (= 비트 이동후 0으로 채웁니다.)
 
>> (Signed Right Shift) 부호를 유지하여 비트를 오른쪽으로 이동시킵니다. (= 음수는 1로 채우고 양수는 0으로 채웁니다.)
 
0xFF 는 음수가 아닌 255 지만, -1 은 0xFF 입니다. 이상하죠? 사실은 -1은 0xFFFFFFFF 입니다. -255 는 signed char 에서는 나올수 없는 값이고 signed short 에서는 0xFF01 입니다. 32비트 signed int 에서는 0xFFFFFF01 입니다. 어떤 의미이냐 하면 음수인 경우에는 형을 크게 하더라도 항상 1로 채워진다는 의미 입니다. Signed Right Shift 에서 음수는 1로 채운다는 것을 설명하는 것입니다.
 
-1은 어떨까요? -1은 어떤 경우라도 모든 비트가 1 이므로 >> n 에서 n 의 값에 관계없이 항상 -1 입니다. 32비트를 넘어서면 비트연산의 의미가 없습니다. 마지막으로 이 점도 유의 해야 겠습니다. 0x8080000000 과 0x80000000 은 다른 값이지만 비트연산을 하면 같은 값입니다.
 
(0xFF80000000>>1 == 0x80000000>>1)? true 4바이트를 넘어서는 FF 는 무시되기 때문입니다.
(0xFF80000000 == 0x80000000)? false 두 수 모두 양수이고 앞의 값이 뒤의 값보다 큽니다.
 
사실 자바스크립트에서 비트연산을 한다는것은 매우 이례적인 일이기 때문에 논하는 자체가 부담일 수 있습니다. 하지만 속도에 욕심이 있는 개발자라면 알고 사용하는것이 좋겠죠~
번호 제목 글쓴이 날짜 조회 수
246 [Gemini] ajax 와 fetch 의 차이 황제낙엽 2025.01.04 3419
245 [검토 완료] 디바이스 카메라로 촬영한 사진을 서버에 업로드하기 샘플 황제낙엽 2024.11.21 3987
244 브라우저에서 이미지를 편집(crop 등) 할 수 있는 오픈소스 Cropper.js 황제낙엽 2024.11.16 3842
243 [ChatGPT] json data 의 정렬 [1] 황제낙엽 2024.07.23 3352
242 DOMContentLoaded 이벤트와 window.onload 이벤트 황제낙엽 2024.07.15 3669
241 fetch() 사용 예제들 황제낙엽 2024.07.09 3380
240 [Copilot] Vanilla JavaScript에서 외부 스크립트 파일에 정의된 함수들을 로드 황제낙엽 2024.06.21 3758
239 [Copilot] ES6 모듈(module) 문법 황제낙엽 2024.06.21 3805
238 [Copilot] JSON 객체 내부 데이터를 순회하면서 조회하는 코드 황제낙엽 2024.06.02 3270
237 [Copilot] JavaScript로 서버에 특정 값을 POST 방식으로 전달하고 응답을 기다리지 않고 바로 종료 황제낙엽 2024.05.31 3615
236 json 데이터 내의 변수명에 prefix 로 type 표현하기 황제낙엽 2024.04.15 3361
235 fetch() 함수 사용 예제 file 황제낙엽 2023.11.23 3605
234 현재 document 의 host 와 port 를 얻는 방법 황제낙엽 2023.10.03 4209
233 (Bard) FileReader 로 여러개의 파일을 read 하는 법 file 황제낙엽 2023.08.23 3660
232 How to build a file upload service with vanilla JavaScript file 황제낙엽 2023.08.22 3715
231 (Bard) JavaScript로 JSON 배열을 작성하는 방법 황제낙엽 2023.08.21 3672
230 모바일 브라우저에서 file input element 를 이용하여 여러장의 이미지를 서버에 전송하려 할때 [1] 황제낙엽 2023.08.21 3703
229 navigator.mediaDevices 황제낙엽 2023.08.21 3798
228 Barcode Detection API 황제낙엽 2023.08.06 3854
227 정규식을 이용한 이메일 검증 스크립트 file 황제낙엽 2023.06.25 2894