#include <stdio.h>
int main(){
char a = 101;
short b = 2334;
int c = 3955253242;
long long d = 4324234234325;
printf("%hhd | %d | %d | %lld", a, b, c, d);
return 0;
}
여기서 일부러 int의 범위를 초과하게 했는데 오류가 안뜨고 -339714054로 출력돼요.
출력결과 => 101 | 2334 | -339714054 | 4324234234325
이렇게 되는데 왜 이런가요? chatGPT한테 물어봐도 엉뚱한 말만 하네요.
Implicit conversion from 'long' to 'int' changes value from 3955253242 to -339714054 - dc App
근데 왜 -3억이 나올까요? 그냥 애초에 에러 띄워주면 될텐데요.. 위에 char랑 short도 값 초과해서 입력해봤는데 에러띄워주던데 int는 에러는 안띄우고 이상한 값을 출력하네요 ㅠㅠ
그건 니가 쓰는 컴파일러/린터 재량임 - dc App
그래서 니는 컴파일러 워닝이 안뜨는게 궁금한거냐 long -> int로 데이터가 어떻게 바뀌는지가 궁금한거냐 - dc App
전자는 이미 말씀하셨으니 후자가 궁금하네요.
int가 담을 수 있는 비트까지 잘라보셈 - dc App
21억까지 담죠. 그러면 18억 정도가 남네요.
마이너스니까 int 값을 2의 보수로 보고 비트를 보자 - dc App
오버플로우라고 검색해봐. 젠투 쟤는 일부러 저러는듯
네 저도 오버플로우인건 아는데 왜 -3억이 나오는지 모르겠네요 ㅠㅠ 18억이 남는데..
아 그런거라면 젠투 말 따라가봐