Endians 질문드립니다.

  • sihon321
    sihon321
    #include <stdio.h>
    int main()
    {
        unsigned v,r=0;
        unsigned f=0xFF;
        int i,j,t;
        scanf("%d", &t);
    
        for(i = 0;i<t;i++)
        {
            scanf("%d",&v);
            r=0;
    
            for(j=0;j<4;j++)
            {
                r=r|(v&f);
    
                if(j<(4-1))
                {   
                    v=v>>8;
                    r=r<<8;
                }
            }
    
            printf("%u\n",r);
        }
    } 
    

    이렇게 푸신분이 있던데 저기서 r=r|(v&f) 부분에서
    r을 왜 or연산을 해주는건가요?
    v와 f를 and연산하는건 f값을 v와 같게하기 위함이 맞나요?
    답변부탁드리겠습니다!


    8년 전
1개의 댓글이 있습니다.
  • seico75
    seico75

    &는 마지막 바이트만 짜르기 위해서, | 는 그 바이트를 추가하기 위해서 입니다.

    v = 0x12345678 일때

    init

    r = 0x00000000
    v = 0x12345678

    iter = 0

    v&f = 0x00000078
    r|(v&f) = 0x00000078

    after iter = 0

    r = 0x00007800
    v = 0x00123456

    iter = 1

    v&f = 0x00000056
    r|(v&f) = 0x00007856

    after iter = 1

    r = 0x00785600
    v = 0x00001234

    iter = 2

    v&f = 0x00000034
    r|(v&f) = 0x00785634

    after iter = 2

    r = 0x78563400
    v = 0x00000012

    iter = 3

    v&f = 0x00000012
    r|(v&f) = 0x78563412

    after iter = 3

    r = 0x78563412
    v = 0x00000012


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.