C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[56485] Re:OxF123을 10진수로 나타내라..
둘리.CSIEDA [dooly386] 1703 읽음    2009-03-21 09:52
if(a & (0xfff<< 15))
이부분에서 15 bit left shift 를 하셨는데요,
컴파일을 32비트 컴파일을 하실경우 unsigned 는 4 byte 짜리 입니다.
16비트 컴파일일 경우 2 byte 이겠지만 32 비트일경우 달라집니다.

unsigned a 를 unsigned short a 로 바꾸시면 32비트 컴파일에서도 16 비트가 됩니다.
부호비트는 2진수의 MSB 에 위치 합니다.

참고적으로 ---

2진수 정수에서 음수의 표현은 몇가지로 표현 됩니다.

1. 부호화된 절대값
이 표현방식은 최상의비트(MSB)를 조절함으로써 음수와 양수를 표현하는 방식입니다. 때문에 최상의비트를 다르게 함으로써 음수,양수를 표현할수 있습니다. 또한 0이 +0과 -0으로 2개 존재함을 알 수 있습니다.

2. 1의 보수
이 표현방식은 약간의 공식을 필요로 합니다. "양수에 역수를 취하면 음수가 된다" 입니다. 즉, 각각의 비트를 1->0, 0->1 로 바꿔주시면 됩니다. 이 표현 방식 또한 0이 +0과 -0으로 2개 존재함을 알 수 있습니다.
1의 보수 표현방식에서 +40과 -40의 표현은 다음과 같습니다.
00101000 (10진수 +40)
11010111 (10진수 -40)

3. 2의 보수
이 표현방식은 1의 보수표현방식을 근간으로 하고 있습니다. "1의 보수를 취한값에 +1을 한다" 입니다.
2의 보수 표현방식에서 +40과 -40의 표현은 다음과 같습니다.
00101000 (10진수 +40)
11011000 (10진수 -40)

즉 음수를 어떠한 방식으로 표현 하느냐에 따라서 달라진다는 것이죠.

제가 C++ Builder로 테스트 해본결과 -1 이 0xFFFF 이므로 결국 2의 보수를 사용 합니다.

2의 보수를 컴퓨터가 사용하는 이유는 음수를 빠르게 덧셈에 적용 (즉 뺄샘을 덧셈으로 하기 위함)
하기 위해서 입니다.

1 - 1 은 결국 1+(-1) 이죠.
그러므로
1  = 0001
-1= 1111
이를 더하면 결국 0000 이 나오죠. 최상위에서 bit 1 이 올려지지만 버려지게 되고요 (4비트에서의 예 입니다)

컴퓨터의 2진수 표시법에 대하여 몇자 적어 보았습니다.

수고하세요..



송인호 님이 쓰신 글 :
: 이거  소스좀 가르켜 주세요,,,
: 저는 밑에처럼 했는데,, 아무리해도 에러가 나서,,, 쫌 ㅠ
:
: #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;
: }

+ -

관련 글 리스트
56483 OxF123을 10진수로 나타내라.. 송인호 1048 2009/03/20
56489     Re:OxF123을 10진수로 나타내라.. 라스코니 1186 2009/03/23
56485     Re:OxF123을 10진수로 나타내라.. 둘리.CSIEDA 1703 2009/03/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.