Programming/C Win32 MFC
엥? 16진수 표현에 음수?
구차니
2026. 8. 25. 10:22
기능을 찾다가 초기화 값에서 이상한 문법을 발견(!)
| static const int rgb2ycbcr_coeff[5][3] = { {0x4D, 0x96, 0x1D}, {-0x2B, -0x55, 0x80}, {0x80, -0x6B, -0x15}, {0x0000, 0x0200, 0x0200}, /* B0, B1, B2 */ {0x2, 0x2, 0x2}, /* S0, S1, S2 */ }; |
그래서 소스코드를 생성하고 타입별로 일단 시도
| $ cat hex.c #include <stdio.h> void main() { char v1 = -0xFF; unsigned char v2 = -0xFF; short v3 = -0xFF; unsigned short v4 = -0xFF; unsigned short v4_1 = -0xFFFF; int v5 = -0xFF; unsigned int v6 = -0xFF; printf("%d %u %d %u %d %u\n", v1, v2, v3, v4, v5, v6); printf("%d %d %d %d %d %d\n", v1, v2, v3, v4, v5, v6); printf("%x %x %x\n", v2, v4, v5); } |
빌드! 경고가 뿜뿜. char 에는 너무 크다~ 라는게 포인트
| $ gcc hex.c hex.c: In function ‘main’: hex.c:5:19: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘-255’ to ‘1’ [-Woverflow] 5 | char v1 = -0xFF; | ^ hex.c:6:28: warning: unsigned conversion from ‘int’ to ‘unsigned char’ changes value from ‘-255’ to ‘1’ [-Woverflow] 6 | unsigned char v2 = -0xFF; | ^ hex.c:9:31: warning: unsigned conversion from ‘int’ to ‘short unsigned int’ changes value from ‘-65535’ to ‘1’ [-Woverflow] 9 | unsigned short v4_1 = -0xFFFF; | |
근데.. 왜 unsigned short과 unsigned int는 예상하지 못한 이상한 값이 나오지?
| $ ./a.out 1 1 -255 65281 -255 4294967041 1 1 -255 65281 -255 -255 1 ff01 ffffff01 1 1 ffffff01 |
아무튼 먼가 이해될 것 같으면서도 이해가 안되는 이상한 현상이 발생 ㅋㅋ
| 65281 | 4294967041 |
![]() |
![]() |

