JS 는 32 비트 가 넘 는 정수 의 비트 연산 을 어떻게 처리 합 니까?
우선, 왜 이 문제 가 문제 가 되 었 는 지 알 아야 한다. 여기 서 JS 에서 아버지의 비트 연산 규칙 을 말 해 야 한다.
우 리 는 JS 가 약 한 유형의 스 크 립 트 언어 라 는 것 을 알 고 있 습 니 다. 모든 수 치 는 정수 든 소수 든 사실은 64 비트 의 부동 소수점 형식 으로 저장 되 어 있 습 니 다. 그러나 두 정수 가 비트 연산 을 할 때 32 비트 의 기호 정수 로 자동 으로 바 뀌 어 이 알 이 아 픈 문 제 를 야기 합 니 다.
이 문 제 를 해결 하기 전에 우 리 는 먼저 이런 일 을 고려 해 보 겠 습 니 다. 만약 당신 앞 에 물 한 항아리 가 있다 면, 당신 은 32L 의 통 만 있 습 니 다. 지금 당신 은 50L 의 물 을 찾 으 려 고 하 는데, 어떻게 찾 으 려 고 합 니까? 두 번 뛰 어 다 니 는 것 이 맞 습 니까?두 번 은 안 되 고 세 번 은 괜 찮 겠 지? 컴퓨터 는 인 류 를 위해 봉사 하 는 것 이 니 이런 생각 은 반드시 통할 수 있 을 것 이다.
예 를 들 어 지금 엄 청 난 숫자 가 있 습 니 다. 우 리 는 그것 이 0xf ff ff ff 라 고 가정 합 니 다. 9 개의 F 가 충분 합 니 다. 32 위 를 넘 으 면 됩 니 다. 만약 에 우리 가 이 숫자 를 가지 고 0xf 000 f 와 다 르 거나 우리 가 원 하 는 결 과 는 0x f 0 fff fff fff 0 맞 습 니까?그러나 이상 은 매우 풍만 하고 현실 은 잔혹 하 다. 왜냐하면 당신 이 이 두 개의 숫자 를 직접 가 져 간 후에 결 과 는 0x 0 fff fff fff 0 이라는 것 을 발 견 했 기 때문이다. 왜냐하면 32 비트 의 정수 로 바 뀌 었 을 때 그 기준 치 를 초과 한 수의 높 은 바이트 부분 이 잘 렸 기 때문이다. 아버지?
내 가 방금 말 한 차례 의 원 리 를 돌 이 켜 보면 JS 가 매번 최대 32 비트 의 비트 연산 만 처리 할 수 있 는 이상 단락 을 나 누 어 처리 할 수 있 습 니까?분명히 말 해 줄 게, 괜찮아.
그렇다면 다음 문 제 는 1, 몇 단락, 어떻게 2 로 나 누 는 지, 분 리 된 데 이 터 는 어떻게 처리 하 는 지, 3 으로 나 누 어 처리 한 데 이 터 는 어떻게 통합 하 는 지 하 는 것 이다.
위의 데 이 터 를 결합 하여 분석 하면 0xf ff ff ff 의 총 효과 적 인 데 이 터 는 실제 적 으로 뒤의 9 개의 바이트 에 만 존재 하고 JS 의 비트 연산 은 최대 4 개의 바이트 의 데 이 터 를 처리 할 수 있 으 며 한 바이트 만 추출 하여 단독으로 처리 하고 나머지 부분 은 다른 단락 으로 처리 하면 된다.
브 라 우 저 에 문제 가 있 습 니 다. 저장 하면 무 너 지고 코드 를 잃 어 버 립 니 다.
var longN = 0xfffffffff; //
var shortN = 0x0ffffff0; //
var tool = 0x000000ff; // ( )
var t_long = longN & tool; //
var t_short = shortN & tool; //
var t_r = t_long ^ t_short; //
var offset = Math.pow(2,tool.toString(16).length * 4);
longN = Math.floor(longN / offset); // , 32
//!!! , parseInt, 64 32
shortN = Math.floor(shortN / offset); //
var t_h = longN ^ shortN; //
t_h *= offset; //
var result = t_h + t_r //
console.log(result.toString(16)); //ff000000f
위의 코드 는 하나의 예 일 뿐 하나의 사고 방향 을 나타 내 는 것 이지 만 아직 완전한 건장 한 해결 방안 이 아니다. 더 많은 수의 위 에 이것 은 실현 할 수 없 는 것 이 고 32 의 수 는 기호 가 있 기 때문에 두 단락 으로 나 누 어 처리 할 때 그 중의 한 단락 은 최대 31 자리 에 불과 하 다.그래서 가장 확실한 방법 은 두 조작 수 중 길이 가 가장 큰 데이터 에 따라 유연 하 게 나 누 는 것 이다. todo...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
D. Walk on Matrix우선 우리는 언제 dp가 틀렸는지 생각한다.가설 행렬 중 하나의 점(x, y)이 10101이다.이때 최대 두 가지 선택이 (x-1, y) 또는 (x, y-1)에서 옮겨진다.다시 가설(x-1, y)은 10000이고 (...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.