포인터 관련하여 질문드립니다! *z = ~(hap & 0xFF); 에서 ~의 의미는?

조회수 473회

안녕하세요! c언어 관련하여 공부를 하다가 궁금한 점이 있어서 질문을 남깁니다! 우선 while문을 실행시켜, cnt값과 hap값을 출력시키는 것 까지는 이해가 되었는데, 그 뒤로 if문이 잘 이해가 가지 않아 질문을 남기게 되었습니다.

*z = ~(hap & 0xFF);부분에서 hap & 0xFF 가 11인 것 까지는 알겠는데, ~ 가 무엇을 의미하는지 검색해봐도 나오지 않습니다. 또한, *z244가 되는 이유를 잘 모르겠습니다.

#include <stdio.h>
unsigned char test(unsigned char*, int, int);

int main(void)
{
    unsigned char message[5] = { 'A', 'B', 'C', 'D' };
    unsigned char ans;
    test(&message[4], 5, 1);
    printf("송신시 결과 = %d\n", (int)message[4]);
    ans = test(&message[4], 5, 2);
    printf("수신시 결과 = %d\n", (int)ans);
    return 0;
}

unsigned char test(unsigned char* p, int cnt, int flag)
{
    unsigned short int hap = 0;
    unsigned char* z;
    z = p;
    while (cnt--)
    {
        hap = hap + *p--;
        if (hap & 0xFF00)
        {
            hap = hap & 0xFF;
            hap = hap + 1;
        }
        printf("cnt = %d hap = %d\n", cnt, hap);
    }
    if (flag == 1)
    {
        *z = ~(hap & 0xFF);
        return 0;
    }
    else
        return ~(hap & 0xFF);
}

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    ~은 비트반전 연산자입니다. z가 char형이므로 8비트만 생각하면, ~11에서 11의 2진수 값은 00001011이고, 비트반전하면 11110100입니다. 이 값이 10진수로 244입니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)