비트연산을 공부하다가...
, 이 성덕님이 작성//1.실행결과 : 254
#include<stdio.h>
int main(){
unsigned char, num3 = 1, num4;
num4 = ~num3;
printf("%d\n", num4);
}
//---------------------------------------
//2.실행결과 : -2
#include<stdio.h>
int main(){
unsigned char num3 = 1;
printf("%d\n", ~num3);
}
위 두 개의 실행결과가 왜 다른지 찾아보다가
char은 연산을 할 때 int형으로 변환이 된다는 글을 봤는데 맞는 말인가요?
맞으면 왜 int형으로 변하는지 궁금합니다.
회신: 비트연산을 공부하다가...
, 도장_ 관리자님이 작성비트 연산자는 정수 타입(integer type)으로 승급이 일어납니다.
num4 = ~num3;
여기서 ~num3는 타입 승급이 발생했고, unsigned char인 num4에 다시 대입이 되면서 나머지 비트는 버려집니다.
두 번째 예제는 ~num3를 직접 출력하기 때문에 타입 승급이 발생한 그대로 출력되기 때문입니다.