1.ŸÀÔÀÇ ³»ºÎ

1.Á¤¼öÀÇ ³»ºÎ

¸Þ¸ð¸®¸¦ ±¸¼ºÇÏ´Â ºñÆ®´Â 0°ú 1¸¸ ÀúÀåÇÒ ¼ö ÀÖ´Â ±â¾ï¼ÒÀÚÀÌ´Ù. ÀÌ ´Ü¼øÇÑ ºñÆ®·Î Å« ¼ö¿Í Á¤¹ÐÇÑ ½Ç¼ö¸¦ ¾î¶»°Ô Ç¥ÇöÇÏ°í °ü¸®ÇÏ´ÂÁö ¿¬±¸ÇØ º¸ÀÚ. ½Ç¹«¿¡ ´çÀå È°¿ëµÇ´Â Áö½ÄÀº ¾Æ´ÏÁö¸¸ ŸÀÔÀÇ ³»ºÎ ±¸Á¶¸¦ µé¿©´Ù º¸¸é ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ ±íÀº °÷À» ÀÌÇØÇÒ ¼ö ÀÖ´Ù.

Á¤¼ö´Â ºñÆ® ¿©·¯ °³¸¦ ¸ð¾Æ 0°ú 1ÀÇ Á¶ÇÕÀ¸·Î ÀÌÁø¼ö¸¦ Ç¥ÇöÇÑ´Ù. ºñÆ® n°³°¡ ¸ðÀ̸é 2n°¡ÁöÀÇ ¼ö¸¦ Ç¥ÇöÇÒ ¼ö ÀÖÀ¸¸ç ºÎÈ£¾ø´Â Á¤¼ö´Â 0 ~ 2n-1ÀÇ ¹üÀ§¸¦ ÀúÀåÇÑ´Ù. ºÎÈ£°¡ ÀÖÀ¸¸é À½¼ö¸¦ Ç¥ÇöÇÒ ¼ö ÀÖÁö¸¸ ÃÖ´ë Ç¥Çö¼ö´Â Àý¹ÝÀÌ µÈ´Ù. 16ºñÆ®ÀÇ unsigned shortÇüÀº 216-1(65535)±îÁö Ç¥ÇöÇÒ ¼ö ÀÖ°í 32ºñÆ®ÀÇ unsigned intÇüÀº 232-1(4294967295)ÀÇ Å« °ªÀ» Ç¥ÇöÇÒ ¼ö ÀÖ´Ù.

º¯¼ö°¡ ±â¾ïÇÒ ¼ö ÀÖ´Â ÃÖ´ë Ç¥Çö ¹üÀ§¸¦ ³Ñ¾î¼­´Â Çö»óÀ» ¿À¹öÇ÷οì(Overflow)¶ó°í ÇÏ¸ç º¯¼ö´Â ÃÊ°úµÈ °ªÀ» ±â¾ïÇÏÁö ¸øÇÏ°í ¾û¶×ÇÑ °ªÀ» °¡Áø´Ù.

 

IncOverflow

#include <stdio.h>

 

int main()

{

     unsigned short us = 65535;

     printf("us = %d\n", us);

     us++;

     printf("us = %d\n", us);

}

½ÇÇà°á°ú

us=65535

us=0

 

16ºñÆ® Å©±âÀÇ usº¯¼ö¸¦ ÀÌ Å¸ÀÔ¿¡ ÀúÀåÇÒ ¼ö ÀÖ´Â ÃÖ´ë°ª 65535·Î ÃʱâÈ­Çß´Ù. ÀÌ »óÅ¿¡¼­ 1Áõ°¡½ÃÅ°¸é 65536ÀÌ µÇ´Âµ¥ ÀÌ °ªÀº 16ºñÆ®ÀÇ ÃÖ´ë Ç¥Çö ¹üÀ§¸¦ ÃÊ°úÇÏ¿© ¿À¹öÇ÷οìµÈ´Ù. us º¯¼ö°¡ 65536À» Á¦´ë·Î ±â¾ïÇÏÁö ¸øÇÏ°í 0ÀÌ µÇ´Â Çö»óÀ» ºñÆ®ÀÇ ¼¼°è¿¡¼­ »ìÆ캸ÀÚ.

65535´Â ÀÌÁø¼ö·Î 1ÀÌ 16°³Àε¥ ¿©±â¿¡ 1 ´õÇϸé ÀÚ¸® ³ÑħÀÌ ¹ß»ýÇÏ¿© 1 ´ÙÀ½¿¡ 0ÀÌ 16°³ÀÎ 17ÀÚ¸®ÀÇ ÀÌÁø¼ö°¡ µÈ´Ù. ÃÖ»óÀ§ ºñÆ®ÀÇ 1Àº 16ºñÆ® ¹üÀ§ ¹Ù±ùÀ̾ Àß·Á ³ª°¡°í ³²Àº ºñÆ®´Â ¸ðµÎ 0À̹ǷΠ°á±¹ 65536Àº 0°ú °°´Ù. 8ºñÆ® ¹üÀ§¿¡¼­ 256(28)À̳ª 32ºñÆ® ¹üÀ§¿¡¼­ 4294967296(232)µµ °á±¹ 0ÀÌ´Ù. ¹Ý´ë·Î ÃÖ¼Ò°ªº¸´Ù ´õ ÀÛ¾ÆÁö¸é ÃÖ´ë°ªÀÌ µÈ´Ù. 16ºñÆ® Á¤¼ö 0À» 1°¨¼Ò½ÃÅ°¸é 65535ÀÌ´Ù.

ºñÆ®ÀÇ ÇÑ°è·Î ÀÎÇØ ÄÄÇ»ÅÍÀÇ Á¤¼ö´Â ¼öÇÐÀÇ Á¤¼ö¿Í ´Ù¸£´Ù. ¼öÇÐÀÇ Á¤¼ö´Â À½¾çÀ¸·Î ¹«ÇÑ´ëÀÇ ¹üÀ§¸¦ Ç¥ÇöÇÏÁö¸¸ µðÁöÅÐ ¼¼°èÀÇ Á¤¼ö´Â ÇÒ´çµÈ ºñÆ®¼ö¿¡ µû¶ó Ç¥Çö ¹üÀ§ÀÇ Á¦ÇÑÀÌ ÀÖ´Ù. ±×·¡¼­ Ç¥ÇöÇÏÇÒ °ªÀÇ ¹üÀ§¿¡ µû¶ó ŸÀÔÀ» Àß ¼±ÅÃÇØ¾ß Çϴµ¥ ½Ç»ýÈ°¿¡¼­ ¼ö½Ê¾ï ÀÌ»óÀÇ ¼ö°¡ ÇÊ¿äÇÑ °æ¿ì´Â µå¹°¾î intÇüÀÌ¸é ¹«³­ÇÏ´Ù.

2.À½¼öÀÇ Ç¥Çö

´ÙÀ½Àº ºÎÈ£ ÀÖ´Â Á¤¼ö ŸÀÔÀ» ¿¬±¸ÇØ º¸ÀÚ. 0°ú 1¸¸ ³ª¿­µÇ´Â ºñÆ®ÀÇ ¼¼°è¿¡¼­ ¼ö¸¦ Çؼ®ÇÏ´Â ¹æ¹ýÀº ÀÏÁ¾ÀÇ ¾à¼ÓÀÌ´Ù. ºÎÈ£¾ø´Â Á¤¼ö´Â ¸ðµç ºñÆ®¸¦ ¼ö·Î¸¸ ÀνÄÇÑ´Ù. 2Áø¼öÀÇ °¢ ÀÚ¸®¼ö´Â 2ÀÇ °Åµì½Â¿¡ ÇØ´çÇÏ´Â °¡ÁßÄ¡¸¦ °¡Áö´Âµ¥ 10Áø¼öÀÇ °¢ ÀÚ¸®¼ö°¡ ÀÏ, ½Ê, ¹é, õ µî 10ÀÇ °Åµì½ÂÀ¸·Î Æò°¡µÇ´Â °Í°ú °°´Ù. ÀÌÁø¼ö 101Àº °¢ ÀÚ¸®¼öÀÇ °¡ÁßÄ¡¸¦ °öÇØ ´õÇÏ¸é ½ÊÁø¼ö 5°¡ µÈ´Ù.

 

101 = 1*22 + 0*21 + 1*20 = 4 + 0 + 1 = 5

 

ÀÌ ¾à¼ÓÀ» º¯°æÇÏ¿© ÀÏ°üµÈ ±ÔÄ¢À» Á¤ÀÇÇÏ¸é ¿©·¯ °¡Áö ¹æ½ÄÀ¸·Î À½¼ö¸¦ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº 3ºñÆ®ÀÇ Á¤¼ö·Î À½¼ö¸¦ Ç¥ÇöÇÏ´Â ´Ù¾çÇÑ ¾à¼ÓÀÇ ¿¹ÀÌ´Ù.

 

ÀÌÁø¼ö

ºÎÈ£ ¾øÀ½

ÀÏÁ¤ ¼ö °¨¼Ò

ºÎÈ£ ºñÆ®¿Í Àý´ë°ª

1ÀÇ º¸¼ö

2ÀÇ º¸¼ö

000

0

-4

0

0

0

001

1

-3

1

1

1

010

2

-2

2

2

2

011

3

-1

3

3

3

100

4

0

-0

-3

-4

101

5

1

-1

-2

-3

110

6

2

-2

-1

-2

111

7

3

-3

-0

-1

 

¡á ÀÏÁ¤¼ö °¨¼Ò¹ý : ºÎÈ£¾ø´Â °ª¿¡¼­ ÀÏÁ¤ÇÑ ¼ö¸¦ »© ÆòÇàÀ̵¿ÇÏ¿© À½¼ö¸¦ Ç¥ÇöÇÑ´Ù. À̶§ »©´Â °ªÀ» ¹ÙÀ̾(bias)¶ó°í Çϴµ¥ Àüü ¹üÀ§ÀÇ Àý¹ÝÀ» »©¸é À½¾çÀÇ ¹üÀ§°¡ ºñ½ÁÇØÁø´Ù. 3ºñÆ®´Â 4¸¦ ¹ÙÀ̾·Î »ç¿ëÇÏ¿© ¿ø·¡ 0ÀÌ -4°¡ µÇ°í 4´Â 0ÀÌ µÇ¸ç 7Àº 3ÀÌ µÇ¾î -4 ~ 3±îÁö Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ´Ü¼øÇÏÁö¸¸ ºñÆ®¿­°ú ¼ýÀÚÀÇ ´ëÀÀ °ü°è°¡ Á÷°üÀûÀÌÁö ¸øÇÏ´Ù.

¡á ºÎÈ£ ºñÆ®¿Í Àý´ë°ª : ÃÖ»óÀ§ 1ºñÆ®¸¦ ºÎÈ£·Î »ç¿ëÇÏ°í ³²Àº 2ºñÆ®·Î Àý´ë°ªÀ» Ç¥ÇöÇÑ´Ù. Ç¥Çö °¡´ÉÇÑ Àý´ë°ªÀº Àý¹ÝÀ¸·Î ÁÙ¾îµéÁö¸¸ À½¼ö¸¦ Ç¥ÇöÇÒ ¼ö ÀÖ¾î °¡Áö¼ö´Â ºñ½ÁÇÏ´Ù. ÀÌ ¹æ¹ýÀº ºÎÈ£¿¡ µû¶ó 0ÀÌ 100°ú 000À¸·Î µÎ °³ Á¸ÀçÇÏ¿© ¸ðÈ£ÇÏ´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù.

¡á 1ÀÇ º¸¼ö¹ý : ¾ç¼ö ºñÆ®¸¦ ¹ÝÀüÇÏ¿© À½¼ö¸¦ ¸¸µç´Ù. ¾ç¼ö 2(010)ÀÇ ºñÆ®¸¦ ¹ÝÀüÇÑ 101À» -2·Î Ç¥ÇöÇÑ´Ù. ¿¬»êÀº °£´ÜÇÏÁö¸¸ ¾ÕÀÇ ¹æ¹ý°ú ¸¶Âù°¡Áö·Î +0, -0ÀÌ µû·Î Á¸ÀçÇÑ´Ù.

¡á 2ÀÇ º¸¼ö¹ý : 1ÀÇ º¸¼ö¿¡ 1À» ´õÇØ À½¼ö¸¦ Ç¥ÇöÇÑ´Ù. Áï ¸ðµç ºñÆ®¸¦ ¹ÝÀü½ÃŲ ÈÄ 1À» ´õÇÏ´Â ¹æ½ÄÀε¥ 2(010)¸¦ ¸ðµÎ ¹ÝÀü½ÃÅ°¸é 101ÀÌ µÇ°í ¿©±â¿¡ 1À» ´õÇÑ 110À» -2·Î Ç¥ÇöÇÑ´Ù. -0Àº 1000ÀÌ µÇ¾î ¿À¹öÇ÷οìµÇ¹Ç·Î ÇÑ°¡ÁöÀÇ 0¸¸ Á¸ÀçÇÑ´Ù.

 

ÀÌ ¿Ü¿¡µµ ¿©·¯ °¡Áö ¹æ¹ýÀ» »ý°¢ÇÒ ¼ö Àִµ¥ Çö´ëÀÇ ÄÄÇ»ÅÍ´Â ¸ðµÎ 2ÀÇ º¸¼ö¹ýÀ» »ç¿ëÇÑ´Ù. ¹ÝÀü ÈÄ 1À» ´õÇÏ´Â °ÍÀÌ ¹øÀâÇØ º¸ÀÌÁö¸¸ ±â°èÀûÀÎ ¿¬»êÀ̾ ºü¸£¸ç 2ÀÇ º¸¼ö¸¦ »ç¿ëÇÏ¸é µ¡¼À¸¸À¸·Î »¬¼ÀÀÌ °¡´ÉÇØÁö´Â ÀÌÁ¡ÀÌ ÀÖ´Ù.

8ºñÆ®ÀÇ ºÎÈ£¾ø´Â º¯¼ö°¡ 100ÀÇ °ªÀ» °¡Áö°í ÀÖÀ» ¶§ 256(0x100)À» ´õÇÏ¸é ¾î¶»°Ô µÇ´ÂÁö »ìÆ캸ÀÚ. °á°ú´Â 356ÀÌÁö¸¸ ¿À¹öÇ÷οìµÇ¾î ¿ø·¡°ª 100ÀÌ µÈ´Ù. 100ºÎÅÍ 1¾¿ °è¼Ó Áõ°¡Çϱ⸦ 256¹ø ¹Ýº¹ÇÏ¸é °á±¹ Á¦ÀÚ¸®ÀÌ´Ù. ±×·¡¼­ 8ºñÆ®¿¡¼­ 256Àº 0°ú °°´Ù.

À̹ø¿¡´Â 100 + 255(0xff)¸¦ °è»êÇØ º¸ÀÚ. °á°ú°ªÀÎ 355µµ ¿À¹öÇ÷οìµÇ¾î ÃÖ»óÀ§ ºñÆ®ÀÇ 256(0x100)ÀÌ Àß·Á ³ª°¡°í 99¸¸ ³²´Â´Ù. 255´Â -1Àε¥ ÀÌ °ªÀº -1¿¡ ´ëÇÑ 2ÀÇ º¸¼öÀÌ´Ù. °°Àº ¿ø¸®·Î 254´Â -2ÀÌ°í 253Àº -3ÀÌ´Ù. ÄÄÇ»ÅÍ´Â µ¡¼ÀÀ» ÇÏ´Â °¡»ê±â¸¸ ÀÖ°í °¨»ê±â´Â µû·Î ¾ø¾î -n ¿¬»êÀ» ÇÒ ¶§ nÀ» 2ÀÇ º¸¼ö·Î ¸¸µç ÈÄ ´õÇÑ´Ù. ´ÙÀ½ ¿¹Á¦·Î ÀÌ µ¿ÀÛÀ» È®ÀÎÇØ º¸ÀÚ.

 

Complement

#include <stdio.h>

 

int main()

{

     unsigned char a = 99;

     unsigned char b = 77;

 

     b = ~b + 1;

     a = a + b;

     printf("a = %d, b = %d\n", a, b);

}

½ÇÇà°á°ú

a = 22, b = 179

 

b¸¦ ¹ÝÀü½ÃÅ°°í 1À» ´õÇØ 2ÀÇ º¸¼ö·Î ¸¸µé¾ú´Ù. 77(0x4d:01001101)À» ¹ÝÀü ÈÄ 1 ´õÇϸé 179(0xb3:10110011)°¡ µÈ´Ù. ÀÌ °ªÀ» a¿¡ ´õÇϸé 278(0x116:100010110)ÀÌ µÇ´Âµ¥ ÀÚ¸® ³ÑħÀÌ ¹ß»ýÇÏ¿© 256Àº ³¯¶ó°¡°í 22(0x16:00010110)¸¸ ³²´Â´Ù. °á±¹ a¿¡¼­ b¸¦ »©´Â °Í°ú °°´Ù.

º¸¼ö(Complement)´Â ¾î¶² ¼ö(±â¼ö)°¡ µÇ±â À§ÇØ º¸ÃæµÇ¾î¾ß ÇÏ´Â ¼öÀε¥ ±â¼ö 10¿¡ ´ëÇÑ 3ÀÇ º¸¼ö´Â 7ÀÌ´Ù. 2ÀÇ º¸¼ö´Â nºñÆ®¿¡ ´ëÇØ 2nÀ» ±â¼ö·Î ÇÑ º¸¼öÀÌ´Ù. 8ºñÆ®¿¡¼­ 2ÀÇ º¸¼ö´Â 256ÀÌ µÇ±â À§ÇØ ´õ ÇÊ¿äÇÑ ¼öÀÌ´Ù. aÀÇ 2ÀÇ º¸¼ö b°¡ ÀÖÀ» ¶§ a + b = 256À̸ç 8ºñÆ®¿¡¼­ 256Àº 0°ú °°´Ù. ±×·¯¹Ç·Î a + b = 0ÀÌ°í a = -b, b = -aÀÇ °ü°è°¡ ¼º¸³ÇÑ´Ù.

1ÀÇ º¸¼ö´Â 2n - 1À» ±â¼ö·Î ÇÑ º¸¼öÀ̸ç nÀÌ 8ÀÏ ¶§ 255(11111111)°¡ ±â¼öÀÌ´Ù. 1ÀÇ º¸¼ö³¢¸®´Â Á¤È®ÇÏ°Ô ºñÆ® ¹ÝÀü °ü°è°¡ ¼º¸³Çϸç ÀÌ °ªÀº ±â°èÀûÀ¸·Î ¾ÆÁÖ ½±°Ô ±¸ÇÒ ¼ö ÀÖ´Ù. 1ÀÇ º¸¼ö¿¡ ´ëÇÑ ±â¼öº¸´Ù 2ÀÇ º¸¼ö¿¡ ´ëÇÑ ±â¼ö°¡ 1 ´õ Å©¹Ç·Î ¹ÝÀü ÈÄ 1À» ´õÇϸé 2ÀÇ º¸¼ö°¡ µÈ´Ù.

3.¹ÙÀÌÆ® ¼ø¼­

¸Þ¸ð¸®ÀÇ ÀúÀå ´ÜÀ§´Â ¹ÙÀÌÆ®Àε¥ ºñÇØ ½ÇÁ¦ ÀúÀåÇÒ °ªÀº 32ºñÆ®³ª 64ºñÆ®·Î ´õ ±æ´Ù. ±×·¡¼­ ¿¬¼ÓÀûÀÎ ¹ÙÀÌÆ®¿¡ °ªÀ» ³ª´©¾î ÀúÀåÇϴµ¥ ¼ø¼­¿¡ µû¶ó µÎ °¡Áö ¹æ½ÄÀÌ ÀÖ´Ù. 0x12345678´Â ÃÑ 32ºñÆ®À̸ç 0x12, 0x34, 0x56, 0x78ÀÇ 8ºñÆ®°ª 4°³·Î ±¸¼ºµÈ´Ù. ÀÏ·ÃÀÇ 4¹ÙÀÌÆ®¸¦ ´ÙÀ½ µÎ °¡Áö ¹æ¹ýÀ¸·Î ÀúÀåÇÒ ¼ö ÀÖ´Ù.

¡á ºò ¿£µð¾È(Big Endian:¼ø¿öµå) : ³ôÀº ÀÚ¸®¼ö¸¦ ¸ÕÀú ÀúÀåÇÑ´Ù. 0x12°¡ °¡Àå ¾ÕÂÊ ¹ÙÀÌÆ®¿¡ ¿À°í ³ª¸ÓÁö ¹ÙÀÌÆ®°¡ ¼ø¼­´ë·Î ÀúÀåµÈ´Ù. »ç¶÷ÀÌ ±ÛÀ» Àд ¼ø¼­¿Í °°¾Æ ÀÚ¿¬½º·´°í ÀÌÇØÇϱ⠽±´Ù. ¸ðÅä·Ñ¶ó °è¿­ÀÇ CPU¿Í ´ëºÎºÐÀÇ RISC CPU, ÀÚ¹Ù °¡»ó ¸Ó½ÅÀÌ ÀÌ ¹æ½ÄÀ» »ç¿ëÇÑ´Ù.

¡á ¸®Æ² ¿£µð¾È(Little Endian:¿ª¿öµå) : ³·Àº ÀÚ¸®¼ö¸¦ ¸ÕÀú ÀúÀåÇÑ´Ù. °¡Àå µÚÂÊ ¹ÙÀÌÆ®ÀÎ 0x78ÀÌ Á¦ÀÏ ¾Õ¿¡ ¿À°í 0x12°¡ Á¦ÀÏ µÚ¿¡ ÀúÀåµÈ´Ù. »ç¶÷ÀÌ º¸±â¿¡ ºÎÀÚ¿¬½º·´Áö¸¸ ±â°è°¡ ´Ù·ç±â´Â ´õ È¿À²ÀûÀÌ´Ù. ÀÎÅÚ °è¿­ÀÇ CPU¿Í DECÀÇ ¾ËÆÄ Ä¨ÀÌ ÀÌ ¹æ½ÄÀ» »ç¿ëÇÑ´Ù.

 

»ç¶÷ÀÇ ÀÔÀå¿¡¼­´Â ºò ¿£µð¾ÈÀÌ ÀÚ¿¬½º·´Áö¸¸ CPUÀÇ ÀÔÀå¿¡¼­´Â ¸®Æ² ¿£µð¾ÈÀÌ ´õ ´Ù·ç±â ½±´Ù. 0x1234¶ó´Â 32ºñÆ® Á¤¼ö°ª¿¡¼­ ÇÏÀ§ 2¹ÙÀÌÆ®¸¸ Àд´ٰí ÇØ º¸ÀÚ. intÇüÀÇ °ªÀ» shortÇü º¯¼ö¿¡ ´ëÀÔÇϰųª Æ÷ÀÎÅ͸¦ ÅëÇØ °£Á¢ÀûÀ¸·Î ÀÐÀ» ¶§¿¡ ÇØ´çÇÑ´Ù. ´ÙÀ½ ±×¸²Àº Á¤¼öÇü Æ÷ÀÎÅÍ pi°¡ °¡¸®Å°´Â 32ºñÆ® °ªÀ» (short *)·Î ij½ºÆÃÇؼ­ Àд ¿¹ÀÌ´Ù.

¸®Æ² ¿£µð¾ÈÀº pi°¡ °¡¸®Å°´Â ¿ø·¡ ¹øÁö¿¡¼­ 2¹ÙÀÌÆ®¸¸ Àд´Ù. ³·Àº ÀÚ¸®¼ö°¡ ¾ÕÂÊ¿¡ Àֱ⠶§¹®¿¡ À§Ä¡´Â ±×´ë·ÎÀÌ°í Àд ±æÀ̸¸ ¹Ù²Ù¸é µÈ´Ù. ÀÌ¿¡ ºñÇØ ºò ¿£µð¾ÈÀº pi°¡ °¡¸®Å°´Â °÷¿¡ ¼±Çà Á¦·Î 2¹ÙÀÌÆ®°¡ ÀÖ¾î µÚÂÊÀÇ 2¹ÙÀÌÆ®¸¦ ÀÐÀ¸·Á¸é pi¸¦ µÚÂÊÀ¸·Î 2¹ÙÀÌÆ® ¿Å°Ü¾ß ÇÑ´Ù.

ŸÀÔÀÇ È®ÀåÀÌ ÀϾ ¶§µµ ºñ½ÁÇѵ¥ 0x1234¶ó´Â 16ºñÆ® Á¤¼ö¸¦ 32ºñÆ®·Î È®ÀåÇØ º¸ÀÚ. ÀÌ·± °æ¿ì´Â ´Ã»ó ÀϾ´Âµ¥ shortÇü º¯¼ö¸¦ Àμö·Î Àü´ÞÇÒ ¶§, ¼ö½Ä ³»¿¡¼­ ¿¬»êµÉ ¶§ Ç×»ó 32ºñÆ®·Î È®ÀåµÈ´Ù. 32ºñÆ® ȯ°æ¿¡¼­´Â 32ºñÆ® ´ÜÀ§·Î ó¸®ÇÏ´Â °ÍÀÌ °¡Àå À¯¸®ÇÏ¸ç ½ºÅÃÀÇ Å©±â°¡ 32ºñÆ®·Î °íÁ¤µÇ¾î Àֱ⠶§¹®ÀÌ´Ù.

¸®Æ² ¿£µð¾ÈÀº 0x34, 0x12ÀÇ µÚ¿¡ 0x00, 0x00¸¦ µ¡ºÙÀÌ¸é °£´ÜÇÏ°Ô 32ºñÆ®·Î È®ÀåµÈ´Ù. µÚÂÊÀÌ ´õ ³ôÀº ÀÚ¸®¿©¼­ µÚ¿¡ ºÙÀÌ´Â 0Àº ¼±ÇàÁ¦·Î°¡ µÇ¾î °ª¿¡ ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê´Â´Ù. ÀÌ¿¡ ºñÇØ ºò ¿£µð¾ÈÀº ¼±Çà Á¦·Î°¡ µé¾î°¥ °ø°£À» ¸¸µé±â À§ÇØ ¾ÕÂÊÀÇ 0x12, 0x34¸¦ µÚÂÊÀ¸·Î À̵¿½ÃÄÑ¾ß ÇϹǷΠ¿©ºÐÀÇ ¿¬»êÀÌ ÇÊ¿äÇÏ´Ù.

º¸´Ù½ÃÇÇ °ªÀÇ Ãà¼Ò³ª È®ÀåÀÌ ÀϾ ¶§ ¸®Æ² ¿£µð¾ÈÀÌ ´õ Æí¸®ÇÏ°í È¿À²ÀûÀÌ´Ù. ¹Ý¸é °ªÀ» ±¸¼ºÇÏ´Â ¹ÙÀÌÆ®¸¦ ¹è¿­Ã³·³ ´Ù·ê ¶§´Â ¸î °¡Áö ´ÜÁ¡ÀÌ ÀÖ´Ù. ¿¹¸¦ µé¾î Á¤¼öÇü °ªÀ» ÇÑ ¹ÙÀÌÆ®¾¿ Àоî Ãâ·ÂÇÑ´Ù°í ÇØ º¸ÀÚ.

 

ReadEndian

#include <stdio.h>

 

int main()

{

     int value = 0x12345678;

     char *p = (char *)&value;

 

     // ¸®Æ² ¿£µð¾È

     for (int i = sizeof(int) - 1;i >= 0;i--) {

          printf("%x ", p[i]);

     }

     puts("");

 

     // ºò ¿£µð¾È

     for (int i = 0;i < sizeof(int);i++) {

          printf("%x ", p[i]);

     }

     puts("");

}

½ÇÇà°á°ú

12 34 56 78

78 56 34 12

 

¸®Æ² ¿£µð¾ÈÀº ³ôÀº ÀÚ¸®°¡ µÚ¿¡ Àֱ⠶§¹®¿¡ ¹è¿­ÀÇ µÚ¿¡¼­ºÎÅÍ Àд´Ù. ºò ¿£µð¾ÈÀ¸·Î ÀúÀåµÈ´Ù¸é ¾Õ¿¡¼­ºÎÅÍ ÀÚ¿¬½º·´°Ô ÀÐÀ¸¸é µÈ´Ù. ¸®Æ² ¿£µð¾ÈÀº »ó½Ä°ú´Â ¹Ý´ë ¼ø¼­·Î °ªÀÌ ÀúÀåµÇ¾î ÀÖ¾î Ȳ´çÇÑ ½Ç¼öÀÇ ¿øÀÎÀÌ µÇ¸ç ¸Þ¸ð¸®¸¦ Á÷Á¢ Á¶ÀÛÇÒ ¶§ Ç×»ó ÁÖÀÇÇØ¾ß ÇÑ´Ù. ÇѸ¶µð·Î Çò°¥¸°´Ù.

¹ÙÀÌÆ® ¼ø¼­´Â Å« °ªÀ» ÀÛÀº ´ÜÀ§¿¡ ³ª´©¾î ÀúÀåÇÏ´Â ³»ºÎÀûÀÎ ¹æ½ÄÀÏ »ÓÀ̾ ¾î¶² ¹æ½ÄÀÌ ´õ ¿ì¼öÇÏ´Ù°í ÇÒ ¼ö´Â ¾ø´Ù. CPU ¼³°èÀÚ°¡ Çϵå¿þ¾îÀÇ ±¸Á¶³ª È°¿ë ¹æ¾È µî ¿©·¯ °¡Áö »óȲÀ» °í·ÁÇÏ¿© µÑ Áß ÇϳªÀÇ ¹æ½ÄÀ» ¼±ÅÃÇÑ °Í »ÓÀÌ´Ù.

»ç½Ç °³¹ßÀÚ°¡ ¹ÙÀÌÆ® ¼ø¼­±îÁö ½Å°æ¾µ ÇÊ¿ä´Â ¾ø´Ù. ¸®Æ² ¿£µð¾ÈÀÌ °Å²Ù·Î ÀúÀåÇÏ´õ¶óµµ ÀÐÀ» ¶§ ¾îÂ÷ÇÇ ´Ù½Ã °Å²Ù·Î Àб⠶§¹®¿¡ ÃÖÃÊ ÀúÀåÇØ ³õÀº °ªÀÌ ÀÐÇôÁö´Â °ÍÀº ¸ÅÇÑ°¡ÁöÀÌ´Ù. ÀúÀå ¹æ½ÄÀÇ Â÷ÀÌÀÏ »Ó °ª ÀÚü°¡ ¹Ù²î´Â °ÍÀº ¾Æ´Ï¾î¼­ º°·Î ½Å°æ¾µ ÇÊ¿ä°¡ ¾ø´Ù.

±×·¯³ª Ư¼öÇÑ »óȲ¿¡¼­´Â À̸¦ °í·ÁÇØ¾ß ÇÏ´Â °æ¿ì°¡ Àִµ¥ µð¹ö±ëÁß¿¡ ¸Þ¸ð¸®¸¦ Á÷Á¢ µé¿©´Ù º»´Ù°Å³ª ¸Þ¸ð¸®ÀÇ °ªÀ» Á¶ÀÛÇÒ ¶§ÀÌ´Ù. 0x1234°¡ 0x34, 0x12·Î ÀúÀåµÇ¾î ÀÖ´Ù°í Çؼ­ ÀÌ»óÇÏ°Ô »ý°¢ÇÏÁö¸¸ ¾ÊÀ¸¸é µÈ´Ù. ¶Ç À̱âÁ¾ ÄÄÇ»ÅÍ°£ÀÇ ³×Æ®¿öÅ© Åë½ÅÀ» ÇÒ ¶§´Â Åë½Å ´ë»óÀÇ ¿£µð¾È¿¡ ¸ÂÃç¾ß ÇÏ´Â ¹ø°Å·Î¿òÀÌ ÀÖ´Ù.

4.ºÎµ¿ ¼Ò¼öÁ¡

½Ç¼ö´Â Á¤¼öº¸´Ù º¹ÀâÇÑ ±¸Á¶¿©¼­ ÀúÀåÇÏ´Â ¹æ½Äµµ ³­ÇØÇÏ´Ù. ½Ç¼ö´Â ºÎÈ£¿Í Á¤¼öºÎ, ¼Ò¼öºÎ·Î ±¸¼ºµÇ¹Ç·Î ÀÌ ¼¼ ºÎºÐ¿¡ ºñÆ®¸¦ ÇÒ´çÇÏ´Â ¹æ¹ýÀ» »ý°¢ÇØ º¼ ¼ö ÀÖ´Ù.

32ºñÆ®¸¦ Àß¶ó °¢ ºÎºÐÀ» ÀúÀåÇß´Ù. ºÎÈ£´Â µÎ °¡Áö °æ¿ì¹Û¿¡ ¾øÀ¸¹Ç·Î 1ºñÆ®¸é ÃæºÐÇÏ°í Á¤¼ö¿Í ¼Ò¼ö¸¦ Àý¹Ý Á¤µµ¾¿ ÇÒ´çÇÑ´Ù. °¡´ÉÇÑ ¹æ¹ýÀÌÁö¸¸ Á¤¼öºÎÀÇ ¹üÀ§°¡ °íÀÛ 32000 ¹Û¿¡ ¾ÈµÇ Å« ¼ö¸¦ Ç¥ÇöÇÒ ¼ö ¾ø´Ù. ¼Ò¼öºÎÀÇ ¹üÀ§µµ 65000±îÁö¿©¼­ Á¤¹Ðµµ°¡ ¼Ò¼öÁ¡ ÀÌÇÏ ´Ù¼¸ ÀÚ¸® ¹Û¿¡ ¾ÈµÈ´Ù.

Á÷°üÀûÀÌ°í °£´ÜÇÏÁö¸¸ ³Ê¹« ¼øÁøÇÏ°í Ä¡¹ÐÇÏÁö ¸øÇÏ´Ù. ±×·¡¼­ ÀÌ ¹æ¹ý ´ë½Å ½Ç¼ö¸¦ °¡¼ö¿Í Áö¼ö·Î ³ª´©¾î Ç¥ÇöÇÏ´Â ºÎµ¿ ¼Ò¼öÁ¡À̶ó´Â ÁúÀûÀ¸·Î ´Ù¸¥ ¹æ¹ýÀ» »ç¿ëÇÑ´Ù. ½Ç¼ö¸¦ 10Áø ºÎµ¿ ¼Ò¼öÁ¡ ÇüÅ·ΠǥÇöÇÏ¸é °¡¼ö * 10ÀÇ Áö¼ö½Â ÇüÅ·Πǥ±âÇÒ ¼ö ÀÖ´Ù.

 

°íÁ¤ ¼Ò¼öÁ¡ ¹æ½Ä

ºÎµ¿ ¼Ò¼öÁ¡ ¹æ½Ä

123.456

1.2345 * 102

0.0123

1.23 * 10-2

1.2345

1.2345 * 100

 

°¡¼ö´Â ¾î¶² ¼ö·Î ±¸¼ºµÇ¾î ÀÖ´ÂÁö °ªÀÇ ¸ð¾çÀ» ÀúÀåÇÑ´Ù. Áö¼ö´Â °¡¼öÀÇ ¾îµðÂë¿¡ ¼Ò¼öÁ¡ÀÌ ÀÖ´ÂÁö¸¦ ÁöÁ¤ÇÏ¿© °ªÀÇ Å©±â¸¦ ÁöÁ¤ÇÑ´Ù. Áö¼ö¿¡ µû¶ó ¼Ò¼öÁ¡ÀÌ µÕµÕ ¶°¼­ ¿òÁ÷À̱⠶§¹®¿¡ ºÎµ¿(Ý©ÔÑ) ¼Ò¼öÁ¡À̶ó°í ÇÑ´Ù. ÀÌ ¹æ½ÄÀº C¾ð¾î»Ó¸¸ ¾Æ´Ï¶ó ¸ðµç ÇÁ·Î±×·¡¹Ö ¾ð¾î³ª ±×·¡ÇÈ ½Ã½ºÅÛÀÌ ÁؼöÇÏ´Â ±¹Á¦ Ç¥ÁØ(IEEE-754)À¸·Î ÁöÁ¤µÇ¾î ÀÖ´Ù. ´ÙÀ½Àº 32ºñÆ® ½Ç¼öÇüÀÎ floatÇüÀÇ ºñÆ® ±¸¼ºÀÌ´Ù.

°¡¼öºÎ°¡ ±æ¾î Á¤¹Ðµµ°¡ ³ô°í Áö¼öºÎ·Î 1038ÀÇ Å« ¼ö¸¦ Ç¥ÇöÇÑ´Ù. 64ºñÆ®ÀÇ double ÇüÀº ½ÊÁø¼ö·Î 15ÀÚ¸®±îÁöÀÇ Á¤¹Ðµµ¸¦ Á¦°øÇÏ°í ÃÖ´ë Ç¥Çö¼ö´Â 10308Á¤µµ¿©¼­ ½Ç¿ëÀûÀ¸·Îµµ ÃæºÐÇÏ´Ù. ºÎµ¿ ¼Ò¼öÁ¡Àº °°Àº ¼ö¸¦ Ç¥ÇöÇÏ´Â Áö¼ö¿Í °¡¼öÀÇ Á¶ÇÕÀÌ ¿©·¯ ¹úÀÎ ¹®Á¦°¡ ÀÖ´Ù. ´ÙÀ½ ¼ö½ÄµéÀº ¸ðµÎ 12.345¶ó´Â ½Ç¼ö°ªÀ» Ç¥ÇöÇÑ´Ù.

 

12.345*100, 1.2345*101, 0.12345*102, 123.45*10-1, 1234.5*10-2

 

ÀÌ·¸°Ô µÇ¸é µÎ º¯¼öÀÇ »óµî ºñ±³°¡ ¾î·Á¿öÁø´Ù. ±×·¡¼­ ÇÑ ¼ö¸¦ Ç¥ÇöÇÏ´Â ¹æ¹ýÀº Çϳª¸¸ Á¸ÀçÇϵµ·Ï °¡¼öÀÇ Á¤¼öºÎ¸¦ ÇÑÀÚ¸®·Î Á¦ÇÑÇÏ¿© Á¤±ÔÈ­(Normalization)ÇÑ´Ù. ÀÌ °úÁ¤À» °ÅÄ¡¸é 12.345´Â 1.2345*101¸¸ °¡´ÉÇØÁø´Ù. Áï, a.bcd*10n ½ÄÀ¸·Î ¼Ò¼öÁ¡ÀÌ Ç×»ó °¡¼öÀÇ Ã¹ ¹ø° ¹Ù·Î ´ÙÀ½¿¡ ÀÖµµ·Ï ÇÑ´Ù.

Á÷°üÀûÀÎ ÀÌÇظ¦ À§ÇØ 10Áø¼ö¸¦ ±âÁØÀ¸·Î ¼³¸íÇߴµ¥ ½ÇÁ¦ ÄÄÇ»ÅÍ´Â 2Áø¼ö¸¦ »ç¿ëÇÑ´Ù. °¡¼ö¿Í Áö¼öµµ ¸ðµÎ 2Áø¼ö¿©¼­ °¡¼ö´Â 1 ~ 2 »çÀÌÀÇ ¼ö·Î Á¦ÇѵǾî Ç×»ó 1.xxxÀÇ ÇüŸ¦ ¶è´Ù. ½Ç¼ö¸¦ ±¸¼ºÇÏ´Â °¢ ¿ä¼Ò´Â ´ÙÀ½°ú °°ÀÌ ±¸¼ºµÈ´Ù.

 

¡á ºÎÈ£ : 0ÀÌ ¾ç¼öÀÌ°í 1ÀÌ À½¼öÀÌµÇ ÀÌ ºÎÈ£´Â ½Ç¼ö ÀÚüÀÇ ºÎÈ£ÀÏ »ÓÀ̸ç Áö¼öÀÇ ºÎÈ£´Â ¾Æ´Ï´Ù.

¡á Áö¼ö : Áö¼ö°¡ nÀÏ ¶§ °¡¼öºÎ¿¡ 2nÀ» °öÇÑ´Ù. À½¼ö Áö¼ö´Â ºÎÈ£ ºñÆ®¸¦ µû·Î ¾²Áö ¾Ê°í ¹ÙÀ̾¸¦ Àû¿ëÇÑ´Ù. 8ºñÆ®ÀÇ Áö¼ö¿¡ ´ëÇØ 127ÀÇ ¹ÙÀ̾°¡ Àû¿ëµÇ¾î Ç¥Çö ¹üÀ§´Â -127~128±îÁöÀÌ´Ù. ÃÖ¼Ò Áö¼ö -127Àº 0À» Ç¥ÇöÇϸç ÃÖ´ë Áö¼ö 128Àº ¹«ÇѴ븦 Ç¥ÇöÇÏ´Â ¿ëµµ·Î ¿¹¾àµÇ¾î ÀÖ´Ù.

¡á °¡¼ö : °¢ ÀÚ¸®¼ö¿¡ 2ÀÇ À½¼ö °Åµì½ÂÀ¸·Î °¡ÁßÄ¡°¡ ºÎ¿©µÈ´Ù. Á¤±ÔÈ­ ±ÔÄ¢¿¡ ÀÇÇØ °¡¼ö´Â Ç×»ó ÀÌÁø¼ö 1 ~ 2»çÀÌ(1.xxx)À̸ç ÀÌ ±ÔÄ¢À» ¸¸Á·Çϱâ À§ÇØ Á¦ÀÏ ¿ÞÂÊ ºñÆ®(20ÀÚ¸®)´Â Ç×»ó 1À̶ó°í °¡Á¤ÇÑ´Ù. ÃÖ»óÀ§ ºñÆ®¸¦ ÀúÀåÇÏÁö ¾Ê´Â ´ë½Å Á¤¹Ðµµ´Â 2¹è ´õ ³ô¾ÆÁø´Ù.

°¡¼öÀÇ Á¦ÀÏ ¿ÞÂÊ ºñÆ®ºÎÅÍ 1/2, 1/4, 1/8, 1/16ÀÇ °¡ÁßÄ¡¸¦ °¡Áö¸ç ÀÌ ºñÆ®µé·ÎºÎÅÍ °è»êµÈ °ª¿¡ 1(20)À» ´õÇÏ¸é ½ÇÁ¦ °¡¼ö°¡ µÈ´Ù. ´ÙÀ½ ½Ç¼ö´Â ½ÊÁø¼ö·Î ¾î¶² ¼öÀÎÁö °è»êÇØ º¸ÀÚ.

 

0 01111101 10000000000000000000000

 

ºÎÈ£°¡ 0À̹ǷΠÀÏ´Ü ¾ç¼ö´Ù. Áö¼ö´Â 125Àε¥ ¹ÙÀ̾ 127À» »©¸é -2ÀÌ´Ù. °¡¼öÀÇ Á¦ÀÏ ¿ÞÂÊ¿¡ 1ÀÌ »ý·«µÇ¾î ÀÖ¾î ½ÇÁ¦ °¡¼ö´Â 110000~À̸ç 1 + 1/2 = 3/2À» Ç¥ÇöÇÑ´Ù. ÀÌ °ªÀ» ½ÊÁø¼ö·Î °è»êÇÏ¸é ´ÙÀ½°ú °°´Ù.

 

3/2 * 2-2 = 3/2 * 1/4 = 3/8 = 0.375

 

¸ðµç °ÍÀÌ 2Áø¼öÀÌ°í ¹ÙÀ̾³ª »ý·«µÈ °ªÀ» °í·ÁÇØ¾ß ÇÏ´Ï »ç¶÷ÀÌ ÀÌ °ªÀ» Á÷Á¢ Àбâ´Â ¹«Ã´ ¾î·Æ´Ù. ÇÏÁö¸¸ 2Áø¼ö¸¦ Àß ´Ù·ç´Â ÄÄÇ»ÅÍ¿¡°Ô´Â ¾ÆÁÖ ½¬¿î ÀÏÀÌ´Ù. ´ÙÀ½ ¿¹Á¦´Â ºÎµ¿ ¼Ò¼öÁ¡ ¼öÀÇ ºñÆ® ±¸Á¶¸¦ ´ýÇÁÇϴµ¥ ÀÌ ¿¹Á¦·Î ´Ù¾çÇÑ ½Ç¼ö°ªÀ» ºÐ¼®ÇØ º¸¸é¼­ floatÇüÀÇ ±¸Á¶¸¦ ¿¬±¸ÇØ º¸ÀÚ

 

PrintFloat

#include <stdio.h>

 

void printfloat(float f)

{

     unsigned t;

     char temp[35], bin[35];

 

     // ºñÆ®¸¦ ´Ù·ç±â ½±µµ·Ï Á¤¼öÇü º¯¼ö¿¡ ´ëÀÔÇÑ´Ù.

     t = *(unsigned *)&f;

 

     // ¼±Çà Á¦·Î¸¦ Æ÷ÇÔÇÑ 32ÀÚ¸®ÀÇ 2Áø¼ö ¹®ÀÚ¿­·Î º¯È¯

     itoa(t, bin, 2);

     memset(temp, '0', 35);

     strcpy(temp + 32 - strlen(bin), bin);

 

     // ºÎÈ£, Áö¼ö ´ÙÀ½¿¡ °ø¹éÀ» Çϳª¾¿ ³ÖÀ½

     bin[0] = temp[0];

     bin[1] = ' ';

     strncpy(bin + 2, temp + 1, 8);

     bin[10] = ' ';

     strcpy(bin + 11, temp + 9);

 

     printf("½Ç¼ö=%f(%s), ", f, bin);

 

     // Áö¼ö Ãâ·Â

     printf("Áö¼öºÎ = %d\n", (t >> 23 & 0xff) - 127);

}

 

int main()

{

     printfloat(0.375f);

     printfloat(3.14f);

     printfloat(-0.5f);

     printfloat(0.1f);

}

½ÇÇà°á°ú

½Ç¼ö=0.375000(0 01111101 10000000000000000000000), Áö¼öºÎ = -2

½Ç¼ö=3.140000(0 10000000 10010001111010111000011), Áö¼öºÎ = 1

½Ç¼ö=-0.500000(1 01111110 00000000000000000000000), Áö¼öºÎ = -1

½Ç¼ö=0.100000(0 01111011 10011001100110011001101), Áö¼öºÎ = -4

 

printfloat ÇÔ¼ö´Â °¢ ºñÆ®¸¦ Àß¶ó ¹®ÀÚ¿­·Î Á¶¸³Çϴµ¥ ºñÆ® Á¶ÀÛ¹®ÀÌ ´Ù¼Ò ¾î·Æ´Ù. ´çÀå ºÐ¼®±îÁö ÇØ º¼ ÇÊ¿ä´Â ¾ø°í ÇнÀ¿ëÀ¸·Î »ç¿ë¸¸ Ç쵂 ´ÙÀ½¿¡ ÇÑ°¡ÇÒ ¶§ ºÐ¼®ÇØ º¸ÀÚ.

ÀÌ °á°ú¿¡¼­ º¸´Ù½ÃÇÇ ºÎµ¿ ¼Ò¼öÁ¡Àº 10Áø ½Ç¼ö¸¦ Á¤È®È÷ Ç¥ÇöÇÏÁö ¸øÇØ 0.1À̶ó´Â °£´ÜÇÑ ¼öÀÇ ºñÆ®¿­ÀÌ ±²ÀåÈ÷ º¹ÀâÇÏ´Ù. ±Ùº»ÀûÀ¸·Î 2Áø¼ö¿Í 10Áø¼öÀÇ ¼ö ü°è°¡ ´Ù¸£±â ¶§¹®ÀÌ´Ù. Àý¹Ý¾¿ ÁÙ¾îµå´Â °¢ ÀÚ¸®¼ö¸¦ ´õÇØ 10Áø¼ö¿¡ µü ¸Â´Â ¼ö¸¦ ¸¸µé ¼ö ¾ø¾î ¾ÆÁÖ ³·Àº ÀÚ¸®±îÁö ³»·Á °¡¾ß ÇÑ´Ù.

 

float f=0.1f;

printf("%.10f",f);

 

½Ç¼ö 0.1À» Ãâ·ÂÇϸé 2ÀÇ °Åµì½ÂÀ¸·Î Á¤È®È÷ Ç¥ÇöÇÒ ¼ö ¾ø¾î 0.1000000015¶ó´Â °ªÀÌ ³ª¿Â´Ù. »ç½Ç ÀÌ Á¤µµÀÇ ¿ÀÂ÷¶ó¸é ¹«½ÃÇصµ µÇ´Â ¹Ì¼¼ÇÑ °ªÀÌ´Ù. ±×·¯³ª ÀÌ·± °æ¹ÌÇÑ °ªÀÌ ¸ðÀÌ¸é ¿ÀÂ÷°¡ Á¡Á¡ Ä¿Áø´Ù. ´ÙÀ½ ¿¹Á¦¸¦ ½ÇÇàÇØ º¸ÀÚ.

 

FloatError

#include <stdio.h>

 

int main()

{

     float d = 0.0f;

 

     for (int i = 0;i < 1000;i++) {

          d += 0.1f;

     }

     printf("%f\n", d);

}

½ÇÇà°á°ú

99.999046

 

0.1À» 1000¹ø ´õÇϸé 100ÀÌ µÇ¾î¾ß ÇÏÁö¸¸ ¹Ýº¹ÀûÀÎ µ¡¼ÀÀÇ ÀÇÇØ ÀÛÀº ¿ÀÂ÷°¡ ´©ÀûµÇ¸é ¿øÇÏ´Â °ª°ú Á¡Á¡ ¸Ö¾îÁø´Ù. ½ÊÁø ½Ç¼ö 0.1f ÀÚü°¡ Á¤È®ÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. 0.1f * 1000À» ¹Ù·Î °è»êÇϸé Áö¼ö ¿¬»êÀ» Á÷Á¢ ÇϹǷΠÁ¤È®ÇÏ°Ô 100.0ÀÌ °è»êµÈ´Ù.

ÀÌ·± ¹Ì¼¼ÇÑ ¿ÀÂ÷°¡ ½ÇÁ¦ ÇÁ·Î±×·¥¿¡¼­ ¸»½éÀ» ÀÏÀ¸Å°´Â °æ¿ì´Â µå¹°´Ù. Á¤¹Ðµµ¸¦ ¿äÇÏ´Â °úÇÐ °è»êÀ̶ó ÇÒÁö¶óµµ ¿ÀÂ÷À²ÀÌ ³·¾Æ ¹«½ÃÇصµ µÉ Á¤µµÀÌ´Ù. ±×·¯³ª ½Ç¼ö´Â Ç×»ó ¾î´À Á¤µµÀÇ ¿ÀÂ÷°¡ ÀÖ´Ù´Â Á¡À» Ç×»ó ÁÖÁöÇØ¾ß ÇÏ¸ç ½Ç¼ö³¢¸® »óµî ºñ±³ ¿¬»êÀ» Çؼ­´Â ¾ÈµÈ´Ù.

À§ ¿¹Á¦¿¡¼­ ·çÇÁ¸¦ ½ÇÇàÇÑ ÈÄ if (d == 100.0f) ¶ó°í ºñ±³ÇÏ¸é °ÅÁþÀ¸·Î Æò°¡µÇ´Âµ¥ ¾Æ¹«¸® ºñ½ÁÇÑ °ªÀÌ¶óµµ ºñÆ®¿­ÀÌ ´Ù¸£±â ¶§¹®ÀÌ´Ù. »óµî ºñ±³ ¿¬»êÀ» ÇÏ´Â ´ë½Å if (abs(d-100.0) < 0.01) ½ÄÀ¸·Î ºÎµî ºñ±³ÇÏ¿© Â÷ÀÌ°¡ ¿ÀÂ÷ ¹üÀ§¾ÈÀ̶ó¸é °°Àº ¼ö·Î º¸´Â °ÍÀÌ ÇÕ´çÇÏ´Ù.

ºÎµ¿ ¼Ò¼öÁ¡ ŸÀÔ¿¡ ´ëÇÑ ¶Ç ´Ù¸¥ ÁÖÀÇ »çÇ×Àº ¹üÀ§¿Í Á¤¹Ðµµ´Â ´Ù¸£´Ù´Â °ÍÀÌ´Ù. floatÇüÀÌ 1038±îÁö Ç¥ÇöÇÒ ¼ö ÀÖ´Ù°í Çؼ­ 10Áø¼ö 38ÀÚ¸®¼ö±îÁö Á¤È®ÇÏ´Ù´Â ¾ê±â´Â ¾Æ´Ï´Ù. Áö¼öÀÇ ¹üÀ§°¡ 10Áø¼ö·Î 38ÀÚ¸®¶ó´Â °ÍÀÌÁö °¡¼öÀÇ Á¤¹Ðµµ´Â ±â²¯ÇØ¾ß 10Áø¼ö·Î 7ÀÚ¸® Á¤µµ¹Û¿¡ µÇÁö ¾Ê´Â´Ù.

 

float f = 123456789.123456789f;

 

ÀÌ ¼±¾ð¹®Àº floatÇü º¯¼ö¿¡ ±ä ½Ç¼ö¸¦ ´ëÀÔÇϴµ¥ ½ÇÁ¦ ÀÌ º¯¼ö¿¡ ±â¾ïµÇ´Â °ªÀº 123456792.0ÀÌ´Ù. 8ÀÚ¸® ÀÌ»óÀÇ °ªÀº ¹Ý¿Ã¸²µÇ¾î ¿ÀÂ÷°¡ ¹ß»ýÇÑ´Ù. ÀÌ·± °æ¿ì´Â °¡¼öºÎ°¡ ÃæºÐÈ÷ Å« doubleÇüÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. doubleÇüÀº ½ÊÁø¼ö·Î 15ÀÚ¸®±îÁö À¯È¿ÇÏ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.

 

FloatError2

#include <stdio.h>

 

int main()

{

     float f1, f2, f3;

     f1 = 123456.0f;

     f2 = 0.0001f;

     f3 = f1 + f2;

     printf("f1=%f\nf2=%f\nf3=%f\n", f1, f2, f3);

}

½ÇÇà°á°ú

f1=123456.000000

f2=0.000100

f3=123456.000000

 

123456.0°ú 0.0001À» ´õÇϸé 123456.0001ÀÌ µÇ¾î¾ß ÇÏÁö¸¸ °á°ú´Â 123456.0ÀÌ µÇ¾î ´õÇϳª ¸¶³ªÀÌ´Ù. f1°ú f2´Â floatÇü¿¡ ¸Â´Â Á¤¹Ðµµ¸¦ °¡ÁöÁö¸¸ µÎ °ªÀÇ Áö¼öÂ÷°¡ ½ÉÇØ ´õÇÑ °á°ú´Â floatÇü¿¡ ¸ÂÁö ¾Ê´Ù. floatÇüÀÇ ºñÆ® ±¸Á¶¸¦ ºÐ¼®ÇØ º¸¸é ÀÌ ¿¹Á¦ÀÇ °á°ú°¡ ¿Ö ÀÌ·¸°Ô ³ª¿À´ÂÁö ¼³¸íÇÒ ¼ö ÀÖ´Ù. ÃæºÐÇÑ Á¤¹Ðµµ¸¦ È®º¸ÇÏ·Á¸é °¡±ÞÀû Å« ŸÀÔÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù.

½Ç¼ö´Â Á¦ÇÑµÈ ºñÆ®¼ö·Î ÃÖ´ëÇÑ Å©¸é¼­µµ Á¤È®ÇÑ °ªÀ» Ç¥ÇöÇϱâ À§ÇØ º¹ÀâÇÑ ±¸Á¶·Î µÇ¾î ÀÖ´Ù. ´ÙÇàÈ÷ ¼öÄ¡ ¿¬»ê º¸Á¶ ÇÁ·Î¼¼¼­°¡ ½Ç¼ö¸¦ ¾Ë¾Æ¼­ ¿¬»êÇÏ°í Çؼ®ÇØ ÁֹǷΠ¿ì¸®°¡ ½Ç¼öÀÇ ºñÆ®¸¦ Á÷Á¢ Çؼ®ÇÒ ÀÏÀº °ÅÀÇ ¾ø´Ù. ½Ç¼öÀÇ ³»ºÎ¸¦ ÀÌÇØÇÏ¸é ´ÙÀ½ Äڵ尡 À߸øµÇ¾ú´Ù´Â °ÍÀº ºÐ¸íÈ÷ ¾Ë ¼ö ÀÖ´Ù.

 

double d = 123.456;

int *pi = (int *)&d;

printf("%d\n", *pi);

 

ÀÌ ÄÚµåÀÇ °á°ú·Î 123ÀÌ ³ª¿À±â¸¦ ±â´ëÇÑ´Ù¸é ¾ÆÁ÷µµ ºñÆ®ÀÇ ¼¼°è¸¦ ÀÌÇØÇÏÁö ¸øÇÑ °ÍÀÌ´Ù. Á¤¼ö¿Í ½Ç¼ö´Â ºñÆ® ±¸Á¶°¡ ¿ÏÀüÈ÷ ´Ù¸£´Ù.