완료됨
자바스크립트에서 비트연산 사용시

자바스크립트 콘솔창에서 0xffff0000과 0xcafebabe를 AND 연산하려고 합니다.

0xffff0000 & 0xcafebabe
-889323520
(-889323520).toString(16)
'-35020000'

AND 연산 수행 후 연산 결과를 16진수로 변환하였을 때 제가 원하는 결과는 0xcafe0000 입니다.

왜 이런 잘못된 결과가 발생하나요?

구글에 어떻게 검색해야 할까요?

#리버싱 #배경지식
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1

자바스크립트 콘솔창에서 해당 결과를 얻을려면 다음과 같이 입력하면 됩니다.

"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

2023.06.27. 17:13