|
C 에서는 둘리님이 말씀하신대로 2's 보수를 사용하니 그걸 염두해 두시고
그러니, 먼저 음수인지 sign bit 을 보고 판단한 후,
음수라면 2's 보수의 역연산을 한후 (즉 -1을 하고, 전 bit 의 보수를 취함, 1111b - 1b = 1110b, ~(1110b) = 0001b )
각 bit position 마다 2^0, 2^1, 2^2, 등의 연산을 하면 되겠죠.
unsigned long long(8 byte), unsigned int(4 byte), unsigned short(2 byte), unsigned char(1 byte) 등에 대해서 모두 동작하도록 하면 재미있을 것 같네요.
송인호 님이 쓰신 글 :
: 이거 소스좀 가르켜 주세요,,,
: 저는 밑에처럼 했는데,, 아무리해도 에러가 나서,,, 쫌 ㅠ
:
: #include <stdio.h>
:
: int main()
: {
:
:
: unsigned a = 0xf123,b;
: printf("a = %d\n",a);
:
: if(a & (0xfff<< 15))
: putchar('-');
: else putchar('+');
:
: putchar((a /=10000)*0x30);
: a%=10000;
: putchar((a /=1000)*0x30);
: a%=1000
: putchar((a /=100)*0x30);
: a%=100
: putchar((a /=10)*0x30);
: putchar((a %10)*0x30);
: putchar('\n');
:
:
: return 0;
: }
|