>  기사  >  웹 프론트엔드  >  JavaScript 32비트 정수 무부호 연산 example_javascript 기술

JavaScript 32비트 정수 무부호 연산 example_javascript 기술

WBOY
WBOY원래의
2016-05-16 17:10:291365검색

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 시프트 작업을 수행하면 됩니다.

>>를 사용하지 않는 것이 가장 좋으며, 가장 왼쪽 비트가 부호 비트로 파싱되고, 숫자가 오버플로되면 파싱되므로 >>>를 사용하는 것이 좋습니다. 음수로.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.