>  기사  >  웹 프론트엔드  >  JavaScript 재미있는 질문: 통계적 바이너리

JavaScript 재미있는 질문: 통계적 바이너리

黄舟
黄舟원래의
2017-02-13 16:23:451387검색

프런트 엔드에서 일하는 사람들은 바이너리를 접할 기회가 거의 없을 것입니다. 이러한 비트 작업은 하위 계층에서 고려해야 할 사항이 아닙니까?

어제 바이너리에 관련된 질문을 봤는데, 비트 연산을 사용하든 안하든 상관없이 JS의 언어 기능 덕분에 쉽게 풀 수 있었습니다.

은 다음과 같이 설명합니다.

양의 십진 정수를 매개변수로 받아서 이를 이진수로 표현하고 그 자리가 1인 숫자를 반환하는 함수를 작성합니다.

예:

1234을 이진수로 표현하면 1001101 00입니다. 10, 51이므로 5이 반환됩니다.

이 설명을 읽고 가장 먼저 생각난 것은 선생님께서 10진수를 2진수로 변환하는 방법을 가르쳐주셨다는 것입니다. (책을 이용하면 더 쉬울 것 같아요 ^_^) .

다행스럽게도 저는 기억력이 좋아서 빨리 생각해냈습니다. 이 양의 정수에 대해 먼저 2의 나머지를 취한 다음 2로 나눕니다. , 그리고 결과를 확인하세요 2의 나머지 부분을 2로 나눕니다... 결과가 0이 될 때까지.

그리고 위의 과정에서 변수를 이용하여 나머지가 1되는 횟수를 기록하고 최종적으로 리턴해줍니다.

그래서 우리는 다음과 같은 접근 방식을 생각해냈습니다.


var countBits = function(n) {
    var count = 0;
    while(n > 0){
        var res = n % 2;
        if(res == 1){
            count++;
        }
        n = parseInt(n / 2);
    }
    return count;
};

이 코드와 아이디어는 상당히 만족스럽지만 언어 기능을 최대한 활용하지는 않습니다. JS의.

JS에 10진수를 2진수로 변환해주는 API가 미리 만들어져 있지 않나요?

number.toString(2), 이진 문자열을 얻지 않나요?

결과가 다 나왔으니 1의 숫자를 하나씩 검색해서 돌아오세요.

흠, 위 두 가지 방법은 좋지만 목적은 같고, 가장 효율적인 방법은 비트 연산입니다.

마지막으로 해외 전문가가 작성한 비트 운영 솔루션을 살펴 보겠습니다!


으르렁

쯧, 눈이 멀게 만드는 리듬.

위 내용은 흥미로운 JavaScript 질문입니다: 통계 바이너리 내용에 대한 자세한 내용은 PHP 중국어 웹사이트(www.php.cn)를 참고하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.