문제

응답에서 내 생각,가 JavaScript 보장 특정 endian 인코딩에서는 Os 와 브라우저?

또는 다른 방법을 넣어는 비트 단위로 교대에 정수"안전한"에서 JavaScript?

도움이 되었습니까?

해결책

예, 안전합니다. JS 비트 운영이 있기 때문에 속도 이점을 얻지 못하지만 "해킹".

다른 팁

이동이 안전하지만,당신의 질문은 결함이 있기 때문에 엔디안에 영향을 미치지 않는 비트 시프트 operations anyway.이동 왼쪽에서 동일한-endian and little-endian 시스템에서 모든 언어입니다.(바르게 이동할 수 있는 다르지만,때문에 해석의 표시 비트이지 않은 상대적 위치의 비트입니다.)

엔디안만을 재생할 때 당신은 옵션이있 해석의 일부 블록의 메모리 바이트 또는 큰 정수의 값이다.에서 일반,자바 스크립트를 주지 않는다 당신은 해당 옵션을 하지 않기 때문에 액세스하는 임의의 블록의 메모리,특히지 않는 블록의 메모리에 의해 점유 변수입니다. 입력하는 배열 의 전망을 제공 데이터에서는 endian-에 민감한 방법으로,하지만의 주문에 따라 달라스 호스트 시스템그것은 반드시 이 같은 대한 모든 가능한 자바 스크립트는 호스트 환경이다.

엔디안에 대해 설명합 물리적 스토리지기 위해,지 논리 저장소 순서입니다.논리적으로,오른쪽 끝 비트 적어도 중요한 비트입니다.지 여부는 비트의 바이트는 한에 있는 가장 낮은 메모리 주소가 완전히 별도 문제,그리고 그것을 때에만의 언어를 노출 같은 개념으로"가장 낮은 메모리 주소는"Javascript 하지 않습니다.력한 형식의 배열을,하지만 다음의 컨텍스트 내에서만 입력 array;그들은 여전히지 않에 대한 액세스를 제공합의 저장을 임의의 데이터입니다.

이 답변 중 일부는 엔디 니스이기 때문에 날짜가 있습니다 ~할 수 있다 타이핑 된 배열을 사용할 때 관련이 있습니다! 고려하다:

var arr32 = new Uint32Array(1);
var arr8 = new Uint8Array(arr32.buffer);
arr32[0] = 255;
console.log(arr8[0], arr8[1], arr8[2], arr8[3]);

Chrome의 콘솔에서 이것을 실행하면 생성됩니다. 255 0 0 0, 내 기계가 작은 엔디언임을 나타냅니다. 하지만, 입력 된 배열은 기본적으로 시스템 엔지니어를 사용합니다, 당신은 볼 수 있습니다 0 0 0 255 대신 기계가 큰 엔디언 인 경우.

ECMA 스크립트는 실제로 정수 유형의 개념을 가지고 있지만 필요에 따라 이중 정제 부동산 지점 값과 암시 적으로 강요됩니다 (표현 된 숫자가 너무 크거나 분수 구성 요소가있는 경우).

많은 주류 JavaScript 통역사 (SpiderMonkey는 예입니다) 구현에서 바로 가기를 취하고 각 명령에 대한 실제 기본 유형의 값을 확인하지 않기 위해 모든 숫자 값을 두 배로 해석합니다. 구현 해킹의 결과로 비트 작업은 적분 유형으로의 캐스트로 구현 한 다음 이중 표현으로 다시 캐스트됩니다. 따라서 JavaScript에서 비트 레벨 작업을 사용하는 것은 좋은 생각이 아니며 어쨌든 성능 향상을받지 못합니다.

JavaScript에서 정수의 "안전한"정수의 비트 변속입니까?

32 비트 (31+부호) 이내에 맞는 정수의 경우에만. Python과 달리 1 << 40을 얻을 수 없습니다.

JavaScript 숫자가 실제로 부유물이지만 Bitwise 연산자가 ECMA-262에 의해 작동하도록 정의되는 방법입니다. (기술적으로, 이중 프레시션 플로트로 52 비트의 Mantissa를 제공하며, 32 비트 int의 범위를 쉽게 덮을 수 있습니다.)

Bitwise 산술과 관련된 'Endianness'의 문제는 없으며, Endianness가 관련 될 수있는 바이트 스토리지 형식이 JavaScript에 내장되어 있지 않습니다.

JavaScript에는 정수 유형이 없으며 부동 소수점 유형 만 있습니다. 이에 대해 걱정할 수있는 구현 세부 사항에 충분히 가까워 질 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top