char 데이터형의 shift 결과가 신기하게 나오네요 ^^;
글쓴이: alwaysrainy / 작성시간: 일, 2003/12/07 - 11:23오후
# cat shift.c
#include <stdio.h>
int main()
{
int i, v = 0;
char ch = 0;
for (i = 0; i < 9; i++)
{
ch = v;
//printf("[i=%d] v => %0x\n", i, v);
printf("ch's value => %0x [%d]\n", ch, ch);
v <<= 1;
v = v | 0x1;
}
return 0;
}
# gcc shift.c -Wall
# ./a.out
ch's value => 0 [0]
ch's value => 1 [1]
ch's value => 3 [3]
ch's value => 7 [7]
ch's value => f [15]
ch's value => 1f [31]
ch's value => 3f [63]
ch's value => 7f [127]
ch's value => ffffffff [-1]
# gcc --version
gcc (GCC) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
참 재미있는 결과인데요 ^^ 여기서 마지막 결과과 ff가 아니고 왜 ffffffff
(4byte) 결과로 출려되는 것일 까요? 단순한 컴파일러 버그인건가요?
Forums:


signed char 이다보니,shift하고 %d로 찍는 과정에서
signed char 이다보니,
shift하고 %d로 찍는 과정에서
sign extension이 일어나는 것 같습니다.
4byte 0xFFFFFFFF이든, 1byte 0xFF이든
-1이라는 것은 동일하니까요.
댓글 달기