포인터 관련하여 질문드립니다! *z = ~(hap & 0xFF); 에서 ~의 의미는?
조회수 358회
안녕하세요! c언어 관련하여 공부를 하다가 궁금한 점이 있어서 질문을 남깁니다! 우선 while문을 실행시켜, cnt값과 hap값을 출력시키는 것 까지는 이해가 되었는데, 그 뒤로 if문이 잘 이해가 가지 않아 질문을 남기게 되었습니다.
*z = ~(hap & 0xFF);
부분에서 hap & 0xFF
가 11인 것 까지는 알겠는데,
~
가 무엇을 의미하는지 검색해봐도 나오지 않습니다.
또한, *z
가 244
가 되는 이유를 잘 모르겠습니다.
#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 답변
-
~
은 비트반전 연산자입니다. z가 char형이므로 8비트만 생각하면,~11
에서 11의 2진수 값은 00001011이고, 비트반전하면 11110100입니다. 이 값이 10진수로 244입니다.
댓글 입력