완료됨
자바스크립트에서 비트연산 사용시
자바스크립트 콘솔창에서 0xffff0000과 0xcafebabe를 AND 연산하려고 합니다.
0xffff0000 & 0xcafebabe
-889323520
(-889323520).toString(16)
'-35020000'
AND 연산 수행 후 연산 결과를 16진수로 변환하였을 때 제가 원하는 결과는 0xcafe0000 입니다.
왜 이런 잘못된 결과가 발생하나요?
구글에 어떻게 검색해야 할까요?
#리버싱
#배경지식
작성자 정보
답변
1
CyberSecurityHat
공부벌레
자바스크립트 콘솔창에서 해당 결과를 얻을려면 다음과 같이 입력하면 됩니다.
"0x" + ((0xffff0000 & 0xcafebabe) >>> 0).toString(16);
잘못된 결과가 나왔던 이유는 정수를 입력하고 자료형을 지정하지 않으면 기본적으로 부호 있는 정수로 인식되기 때문입니다. 그래서 비트 연산을 할 때 피연산자가 부호 있는 정수로 사용되어서 결과도 부호 있는 정수로 나온 것입니다. 이를 부호 없는 정수로 바꿔주면 결과가 제대로 나옵니다.
해당 내용은 다음 문서에서 확인할 수 있습니다.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Numbers
https://tc39.es/ecma262/#sec-bitwise-shift-operators