2 진법 0 과 1 을 찾 습 니 다.

3931 단어 알고리즘 사고
2 진법 에서 0 과 1 의 개 수 를 찾 는 문제 도 흔히 사 고 를 고찰 하 는 문제 이다.인터넷 에 서 는 2 진법 중 1 의 개 수 를 찾 는 것 에 대해 이미 논술 이 잘 되 어 있 으 며, 여기 서도 1 의 개 수 원 리 를 찾 는 데 많은 편폭 을 들 이지 않 는 다.코드
    int n=0;
    cin>>n;
    int count=0;

    while(n)
    {
        n=n&(n-1);//      1
        count++;
    } 
    cout<<count<return 0;

0 의 개 수 를 찾 는 방법 에 대해 서 는 많은 지면 을 써 서 이야기 하 겠 습 니 다.일반적으로 이 진수 에서 0 의 개 수 를 찾 습 니 다. 이 0 의 개 수 는 맨 왼쪽 첫 번 째 1 의 자리 부터 오른쪽으로 세 는 개수 입 니 다. 예 를 들 어 10 진법 8 - > (1000) 2 에 3 개의 0 이 있 으 면 0 을 찾 은 개 수 는 당연히 오른쪽 연산 으로 만 계산 할 수 있 습 니 다. 그러나 주의해 야 할 것 은 입력 수가 마이너스 라면 가장 높 은 위 치 를 기호 로 1 (예 를 들 어 - 8 - – > > > >) 로 설정 하 는 것 입 니 다.(1000.0000.0000.1000)2)이때 오른쪽 이동 연산 은 기호 위 치 를 수정 하지 않 습 니 다. 기호 위 치 는 계속 1 이 되 기 때문에 주의 하지 않 으 면 순환 이 생 길 수 있 습 니 다. 여기 서 우 리 는 오른쪽 에서 세 는 마지막 1 의 왼쪽 0 은 우리 가 통계 하고 자 하 는 0 이 아니 기 때문에 우 리 는 먼저 이 숫자 가 마이너스 인지 아 닌 지 를 판단 할 수 있 습 니 다. 마지막 으로 정 수 를 바탕 으로 통 계 를 하면 순환 이 나타 나 지 않 습 니 다. 다음은 코드 코드 입 니 다.
    int n=0;
    cin>>n;
    if(n==0) return 1;
    if(n<0) n=-n;
    int count=0;

    while(n)
    {
        if((n&0x01) == 0)
        {
            count++;
        }
        n=n>>1;
    } 
    cout<<count<return 0;

자, 코드 를 한 단락 더 붙 여 주세요.
int n=0;
    cin>>n;//n=1024
    if(n==0) return 1;
    int count=0;

    while(~n)//while(n+1)
    {
        n=n|(n+1);
        count++;
    } 
    cout<<count<return 0;

count 의 최종 결 과 는 얼마 입 니까? 답 은 31 입 니 다. 순환 의 기능 은 어떤 역할 을 합 니까? 예 를 들 어 알 수 있 듯 이 0 을 통계 해 야 하 는 개수 입 니 다. 그러나 그 는 int 유형 중 전체 0 의 수 를 통계 하 는 것 입 니 다. 신기 하지 않 습 니까? 원 리 는 사실 비트 연산 입 니 다. 다음 에 우 리 는 간단 한 예 로 설명 합 니 다. 만약 에 우리 가 한 유형 이 반 글자 밖 에 없다 고 가정 합 니 다.절의 크기 는 4 자리 이 며, 모두 1 을 설정 한 후 종료 하면 프로그램 논리 에 따라 순환 이 종 료 됩 니 다. 초기 n = 8 - > (1000) 2 차 연산 후 n = (1000) | (1001) n = 1001 = 9 count = 1 ~ n = 0110 n + 1 = 1010 2 차 연산 후 n = (1001) n = 1011 = 11 count = 2 ~ n = 0100 n + 1 = 1100 3 차 연산 후 n = (1011) | (1100)n = 111 = 16 count = 3 ~ n = 0, 종료 순환 n + 1 = 1.0000 / / 넘 침
순서대로 연산 할 때마다 맨 오른쪽 에 있 는 0 을 1 로 설정 하고 마지막 에 이 유형의 모든 것 이 1 이라는 것 을 알 수 있 습 니 다. 이때 1 을 더 하면 넘 칩 니 다. 따라서 위의 코드 는 입력 수의 바 이 너 리 표현 에서 이 유형의 0 개 수 를 통계 할 수 있 습 니 다. 갑자기 비트 연산 이 기묘 하 다 고 생각 하지 않 습 니까?

좋은 웹페이지 즐겨찾기