VC++6.0 환경입니다.
// 1 unsigned char uch; uch = 0xff;
// 2 char ch ; ch = 0xff;
2번이 경고가 발생합니다 => ... truncation from 'const int' to 'char'
예전에 봤었던 C기초 책에서는 상수는 int형으로 간주한다고 되어있습니다만.. 그렇다면 1번도 경고가 발생해야 하는것 아닌가요? 왜 1번은 warning이 없을까요~?
먼저, 0xff는 int 형 상수가 맞습니다.
1번의 경우 16진수 ff, 그러니까 10진수 255를 unsigned char 형에 저장하는 것이기 때문에 값 손실이 없습니다. 하지만, 2번의 경우 signed char 형에 저장하는 것이기 때문에 값 손실이 일어납니다.
unsigned char 형은 0부터 255까지의 값을 저장할 수 있으며, singed char 형은 -128부터 127까지의 값을 저장할 수 있습니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
unsigned와 signed의 차이 때문입니다.
먼저, 0xff는 int 형 상수가 맞습니다.
1번의 경우 16진수 ff, 그러니까 10진수 255를 unsigned char 형에 저장하는 것이기 때문에 값 손실이 없습니다.
하지만, 2번의 경우 signed char 형에 저장하는 것이기 때문에 값 손실이 일어납니다.
unsigned char 형은 0부터 255까지의 값을 저장할 수 있으며,
singed char 형은 -128부터 127까지의 값을 저장할 수 있습니다.
댓글 달기