Programming/C Win32 MFC2026. 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 */
};

[링크 : https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/Changing-IPU-Color-Space-Conversion-parameters/ta-p/1100972]

 

그래서 소스코드를 생성하고 타입별로 일단 시도

$ 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
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
Posted by 구차니