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