#include <stdio.h> int main() { int inum; int icnt; char *cp; cp = (char*)&inum;
inum = 0x7788aabb; printf("%02X ", *cp); printf("%d 0xFFFFFFBB\n", *cp); /*printf("%02X ", *(cp+0)); printf("%02X ", *(cp+1)); printf("%02X ", *(cp+2)); printf("%02X ", *(cp+3));*/ 순서대로
FFFFFFBB, FFFFFF AA, FFFFFF88, 77이 나온다. for(icnt =0; icnt<4; icnt++) { printf("%02X ", *(cp + icnt)); }
return 0; }
*cp는 char형 포인터 변수로 선언하여 inum의 값의 1바이트값인 BB를 갖는다.
%02x는 두자리수를 나타내야 하는데 FFFFFFBB 8자리가 나타난다.
cpu상의 값은 FF FF FF BB인데 BB앞에 F를 1로 인식한다. 그래서 컴퓨터는
앞에 숫자가 있다고 판단하여 8자리까지 모두 나타내고 있다.
BB = -69, 계산기로 69의 2의 보수를 취하면 나온다.
원래7788AABB를 포인트 변수 cp형 1byte크기로 BB. 그것을
for문으로 포인터 변수 cp에 icnt를 1씩 더하여 값을 나타냈다.
BB(cp +0), AA(cp+1), 88(cp+2), 77(cp+3), char는 1byte형식
이라서 1칸씩 이동하는 것을 알 수 있다.
그래서 각각 FFFFFFBB, FFFFFFAA, FFFFFF88, 77이 나왔다.
signed는 범위가 -127~127까지이므로 77은 십진수로 119라서 제대로 인식하지만
나머지 BB같은경우는 십진수로 unsigned 같은 경우 187,
signed같은 경우 -69가 된다.
그러나 cpu는 4byte형태로 저장이 되므로 BB앞에 음수로 인식하여
빈자리를 채우는데 FFFFFFBB가 뜬다.
양의 정수라면 000000BB가 되어 BB만 출력이 된다.
|