¸Þ¸ð¸®¸¦ ±¸¼ºÇÏ´Â ºñÆ®´Â 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ÇüÀÌ¸é ¹«³ÇÏ´Ù.
´ÙÀ½Àº ºÎÈ£ ÀÖ´Â Á¤¼ö ŸÀÔÀ» ¿¬±¸ÇØ º¸ÀÚ. 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ÀÇ º¸¼ö°¡ µÈ´Ù.
¸Þ¸ð¸®ÀÇ ÀúÀå ´ÜÀ§´Â ¹ÙÀÌÆ®Àε¥ ºñÇØ ½ÇÁ¦ ÀúÀåÇÒ °ªÀº 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·Î
ÀúÀåµÇ¾î ÀÖ´Ù°í Çؼ ÀÌ»óÇÏ°Ô »ý°¢ÇÏÁö¸¸ ¾ÊÀ¸¸é µÈ´Ù. ¶Ç À̱âÁ¾ ÄÄÇ»ÅÍ°£ÀÇ ³×Æ®¿öÅ© Åë½ÅÀ» ÇÒ ¶§´Â
Åë½Å ´ë»óÀÇ ¿£µð¾È¿¡ ¸ÂÃç¾ß ÇÏ´Â ¹ø°Å·Î¿òÀÌ ÀÖ´Ù.
½Ç¼ö´Â Á¤¼öº¸´Ù º¹ÀâÇÑ ±¸Á¶¿©¼ ÀúÀåÇÏ´Â ¹æ½Äµµ ³ÇØÇÏ´Ù. ½Ç¼ö´Â
ºÎÈ£¿Í Á¤¼öºÎ, ¼Ò¼öºÎ·Î ±¸¼ºµÇ¹Ç·Î ÀÌ ¼¼ ºÎºÐ¿¡ ºñÆ®¸¦ ÇÒ´çÇÏ´Â ¹æ¹ýÀ» »ý°¢ÇØ º¼ ¼ö ÀÖ´Ù.
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ÀÌ ³ª¿À±â¸¦ ±â´ëÇÑ´Ù¸é ¾ÆÁ÷µµ ºñÆ®ÀÇ ¼¼°è¸¦
ÀÌÇØÇÏÁö ¸øÇÑ °ÍÀÌ´Ù. Á¤¼ö¿Í ½Ç¼ö´Â ºñÆ® ±¸Á¶°¡ ¿ÏÀüÈ÷ ´Ù¸£´Ù.