태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

티스토리 툴바



'C언어'에 해당되는 글 2건

  1. 2009/04/27 IEEE 754 부동소수점표현 방식
  2. 2009/04/27 Big-Endan Little-Endan
2009/04/27 19:28

IEEE 754 부동소수점표현 방식

▣ 부동소수점 형식을 표현하는 IEEE 754

IEEE 754 표준에는 32비트, 64비트, 43비트, 79비트에 대한 형식을 정의하고 있습니다.

32비트 부동소수점 표현 – Single Precision(단정도, float)

[값의 저장 범위 : 1.2E-38 ~ 3.4E38]



3.2
라는 실수 값이 32비트 부동소수점 표현방식에 따라 어떻게 저장되는지 그 과정을 설명을 하겠습니다.

10진수 3 2진수로 변환하면 0011 입니다. 소수부 0.2값을 이진법으로 변환하는 방법은 해당값에 2를 곱해서 그 결과 값이 1을 넘지 않으면 0, 결과 값이 1이 나오면 1이라고 명시하고 변환 완료, 결과 값이 1을 넘으면 1이라고 명시하고 결과 값에서 1을 빼고 결과 값이 1이 나올때까지 이 과정을 반복합니다.

0.2 * 2 = 0.4 -> 0

0.4 * 2 = 0.8 -> 0

0.8 * 2 = 1.6 -> 1

0.6 * 2 = 1.2 -> 1

0.2 * 2 = 0.4  여기서는 동일한 값이 반복되기 때문에 생략… 0.2을 이진수로 변환한 값은 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1……입니다.

이 값은 양수이기 때문에 부호비트는 0 입니다.

1 1 . 0 0 1 1 0 0 1 1 0 0 1 1….

1 . 1 0 0 1 1 0 0 1 1 0 0 1 1… * 2 1 승수  -> “가수는 1 . 1 0 0 1 1 0 0 1 1 0 0 1 1 … “이고 지수는 1 “이 됩니다.

지수는 음수가 나올수 있기 때문에 결국 8비트의 저장공간에 음수 또는 양수 형태의 지수를 저장해야하기 때문에 8비트의 공간을 양수와 음수를 위해서 절반으로 나누게 됩니다. 8비트의 저장 공간이 0 ~255 사이의 값을 저장할 수 있는 크기이기 때문에 절반으로 나누어 127을 중간 값으로 정의되어 있습니다. 127 0을 의미하게 됩니다.

현재 지수는 1이여서 127 + 1의 값으로 저장됩니다. 128을 이진수로 변환하면 10000000 이기 때문에 지수부 8비트에 저장되는 값의 형태는 1 0 0 0 0 0 0 0 이 됩니다.

가수부는 23비트 10011001100110011001100 이다 하지만 여기서 23비트에서 짤린다음 비트가 1이면 반올림하고 0이면 올림이 일어나지 않는다.

3.2의 실수를 표현하면

0 1 0 0 0 0 0 0 0 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1

16진수로 표현하면 404CCCCD

'C언어' 카테고리의 다른 글

IEEE 754 부동소수점표현 방식  (0) 2009/04/27
Big-Endan Little-Endan  (0) 2009/04/27
Trackback 0 Comment 0
2009/04/27 19:25

Big-Endan Little-Endan

short 메모리 값을 네트워크 바이트 순서에서 호스트 바이트 순서로 변경합니다.

호스트 바이트 순서란 지금 사용 중인 시스템에서 2바이트 이상의 큰 숫자 변수에 대해 바이트를 메모리 상에 어떻게 배치하는지 순서를 말하며, 네트워크 바이트 순서는 2 바이트 이상의 큰 숫자에 대해 어떤 바이트부터 전송할지에 대한 순서를 말합니다.

1 바이트 크기의 자료를 다른 시스템으로 전송할 때에는 문제가 없습니다만 2 바이트 이상의 큰 순자를 전송할 때, 큰 단위를 먼저 전송할 지 아니면 작은 단위의 값을 먼저 전송할 지를 미리 정하지 않으면 문제가 발생합니다.

, 16진수 값 0x1234와 같은 두 바이트 값은 시스템에 따라서 메모리에 저장할 때 작은 단위의 값부터 0x34, 0x12 순서로 저장하는 Little-Endian을 사용하는 시스템이 있는가 하면, 반대로 큰 단위의 값부터 0x12, 0x34식으로 저장하는 Big_Endian 시스템이 있습니다. 이렇게 바이트 배열 순서가 서로 다르다면 2바이트 이상의 큰 숫자를 전송할 때 어느 바이트가 큰 단위의 값인지를 모른다면 혼란이 발생할 것이므로 당연히 서로 전송하는 방식을 맞추어야 하는데, 네트워크에서는 Big-Endian을 사용합니다.

#include <stdio.h>

#include <arpa/inet.h>

 

int main( void)

{          

   short host_byte    = 0x3412;

  

   printf( "%x to %x\n", host_byte, ntohs( host_byte));

 

   return 0;

}


'C언어' 카테고리의 다른 글

IEEE 754 부동소수점표현 방식  (0) 2009/04/27
Big-Endan Little-Endan  (0) 2009/04/27
Trackback 0 Comment 0