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이라는 것은 동일하니까요.
댓글 달기