JavaScript에서 모든 정수 변수는 기본적으로 부호 있는 정수입니다. 이것은 무엇을 의미합니까?
부호 있는 정수는 31비트를 사용하여 정수 값을 나타내고, 비트 32는 정수의 부호를 나타냅니다. 0은 양수를 나타내고 1은 음수를 나타냅니다.
값 범위는 -2^31 - 2^31-1, 즉 -2147483648부터 2147483647입니다.
JavaScript는 비트 연산을 수행할 때 32비트 부호 있는 정수 유형을 사용합니다. 이는 변환 결과도 32비트 부호 있는 정수 유형임을 의미합니다. Shifting을 수행하다 보면 예상치 못한 결과가 나오는 경우가 있습니다. 다음은 C언어와 JS를 비교한 것입니다.
C 언어
다음과 같이 코드 코드를 복사합니다.
부호 없는 int a = 3774191835u;
부호 없는 int b = a >> 2;
/* b == 943547958 */
자바스크립트
다음과 같이 코드 코드를 복사합니다.
var a = 3774191835;
var b = a >> 2;
/* b == -130193866 */
보시다시피 JavaScript는 비트 연산을 수행할 때 부호 있는 정수를 사용하므로 다른 결과를 얻습니다. 어떻게 해결하나요?
JavaScript의 부호 있는 숫자를 부호 없는 숫자로 변환할 수 있습니다. >>>0 교대 연산을 수행하면 됩니다.
>>를 사용하지 않는 것이 가장 좋으며, 가장 왼쪽의 비트가 부호 비트로 해석되기 때문에 >>>를 사용하는 것이 좋습니다.