기능을 찾다가 초기화 값에서 이상한 문법을 발견(!)
| 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 |
![]() |
![]() |
'Programming > C Win32 MFC' 카테고리의 다른 글
| c malloc 이후 free 시에 원인불명으로 죽는 경우 (1) | 2026.01.16 |
|---|---|
| float 자릿수 제한 (0) | 2025.10.11 |
| free(): invalid next size (normal) (0) | 2023.12.18 |
| c에서 cpp 함수 불러오기 (0) | 2023.01.04 |
| MSB / LSB 변환 (0) | 2022.08.29 |


