ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JavaScript에서 0x80000000 >> 1이 음수 값을 생성하는 이유는 무엇입니까?
    카테고리 없음 2020. 8. 10. 13:36

    질문

    비트 연산으로 몇 가지 테스트 수행 / JavaScript로 이동

    0x80000000 >> 1 // returns -1073741824 (-0x40000000)

    나는 그것이 0x40000000을 반환하기를 기대할 것입니다.

    0x40000000 >> 1 // returns 0x20000000
    0x20000000 >> 1 // returns 0x10000000

    답변1

    산술 시프트 논리적 이동 > > >

    0x80000000 >>> 1 // returns 1073741824 (0x40000000)


    답변2

    자바스크립트에서 > > 서명 된 오른쪽 시프트 연산자 입니다. 언어 사양 의 §11.7.2에서 다음과 같이 말합니다.

    오른쪽 피연산자에 지정된 양만큼 왼쪽 피연산자에서 부호 채우기 비트 오른쪽 시프트 연산을 수행합니다.

    이동이 완료되기 전에 왼쪽 피연산자는 부호있는 32 비트 정수로 변환됩니다 (사양에 제공된 알고리즘의 5 단계). 귀하의 경우이 변환은 주어진 양수를 음수 값으로 바꿉니다. 그 후 실제 이동이 수행되어 값의 음수 부호를 유지합니다.



     

     

     

     

    출처 : https://stackoverflow.com/questions/14061999/why-does-0x80000000-1-in-javascript-produce-a-negative-value

    댓글

Designed by Tistory.