3-3-³ª.Á¤¼öÇüÀÇ ±æÀÌ

CÀÇ Á¤¼öÇü, ´õ Á¤È®ÇÏ°Ô ¸»Çؼ­ ÄÄÇ»ÅÍ°¡ Ç¥ÇöÇÏ´Â Á¤¼ö¶ó´Â °³³äÀº ¼öÇп¡¼­ ¸»ÇÏ´Â Á¤¼ö¿Í´Â Àǹ̰¡ ¾à°£ ´Ù¸£´Ù. ¼öÇÐÀÇ Á¤¼ö´Â À½¾çÀ¸·Î ¹«ÇÑ´ëÀÇ °ªÀ» Ç¥ÇöÇÒ ¼ö ÀÖÁö¸¸ À¯ÇÑÇÑ ¸Þ¸ð¸®¸¦ °¡Áø ÄÄÇ»ÅÍ´Â ÀÌ·± ¹«ÇÑÇÑ °ªÀ» Ç¥ÇöÇÏÁö ¸øÇϸç Àڽſ¡°Ô ÇÒ´çµÈ ¸Þ¸ð¸® ¾ç¸¸Å­ÀÇ °ª¸¸ ±â¾ïÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­ °¡²û ¿¬»ê °á°ú°¡ ¿ë·®À» ³Ñ¾î¼­´Â °æ¿ì°¡ ¹ß»ýÇϱ⵵ Çϴµ¥ ´ÙÀ½ ¿¹Á¦¸¦ ½ÇÇàÇØ º¸ÀÚ.

 

¿¹ Á¦ : overflow

#include <Turboc.h>

 

void main()

{

     short a,b,c;

     unsigned short s,t,u;

 

     a=20000;

     b=30000;

     c=a+b;

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

 

     s=20000;

     t=30000;

     u=s-t;

     printf("%d-%d=%d\n",s,t,u);

}

 

Á¤¼öÇü º¯¼ö·Î °£´ÜÇÑ µ¡¼À, »¬¼ÀÀ» ÇØ º¸¾Ò´Âµ¥ ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.

 

20000+30000=-15536

20000-30000=55536

 

¼¼ °³ÀÇ 2¹ÙÀÌÆ® Á¤¼ö(short) a, b, c¸¦ ¼±¾ðÇÏ°í a¿¡ 20000, b¿¡ 30000À» ´ëÀÔÇÑ ÈÄ ÀÌ µÎ°ªÀ» + ¿¬»êÀÚ·Î ´õÇØ c¿¡ ´ëÀÔÇß´Ù. ±×·¯¸é c´Â ´ç¿¬È÷ 50000À̶ó´Â °ªÀ» °¡Á®¾ß°ÚÁö¸¸ ½ÇÁ¦ °á°ú´Â ¾û¶×ÇÏ°Ôµµ -15536À¸·Î Ãâ·ÂµÈ´Ù. ¿Ö³ÄÇϸé a, b, c º¯¼ö´Â ºÎÈ£ÀÖ´Â 2¹ÙÀÌÆ®ÀÇ Á¤¼öÇüÀÎ shortÇüÀ¸·Î ¼±¾ðµÇ¾ú°í ÃÖ´ë 32767ÀÌ»óÀÇ ¼ö¸¦ ÀúÀåÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. 50000À̶ó´Â °ªÀÌ ´ëÀԵDZâ´Â ÇÏÁö¸¸ shortÇüÀº ÃÖ»óÀ§ ºñÆ®¸¦ ºÎÈ£ ºñÆ®·Î Çؼ®Çϱ⠶§¹®¿¡ À½¼ö°¡ µÇ¾î ¹ö¸®´Â °ÍÀÌ´Ù. ÀÌ·± ½ÄÀ¸·Î º¯¼öÀÇ ÀúÀå ¿ë·®À» ³Ñ¾î¼­´Â Çö»óÀ» ¿À¹öÇ÷οì(Overflow)¶ó°í ÇÑ´Ù.

ÀÌ·± ¹®Á¦°¡ ¹ß»ýÇÑ ±Ùº»ÀûÀÎ ¿øÀÎÀº ¸¸´ÜÀ§ÀÇ ¼öÄ¡¸¦ ÀúÀåÇϴµ¥ shortÇüÀ» »ç¿ëÇߴٴµ¥ ÀÖ´Ù. a,b,c¸¦ unsigned shortÇüÀ¸·Î¸¸ ¹Ù²Ù¾îµµ À§ ¿¹Á¦´Â Á¦´ë·Î ½ÇÇàµÈ´Ù. ±×·¯³ª ±×·¸°Ô ÇÏ´õ¶óµµ 65535ÀÌ»óÀÇ ¼ö¸¦ ÀúÀåÇÒ ¼ö´Â ¾ø´Ù. ´õ Å« ¼ö¸¦ ´Ù·ç·Á¸é int³ª unsigned°°Àº 4¹ÙÀÌÆ®ÀÇ ´õ Å« ŸÀÔÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. int´Â 20¾ï Á¤µµÀÇ Å« ¼öÄ¡¸¦ ÀúÀåÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÀϹÝÀûÀ¸·Î ¿À¹öÇÃ·Î¿ì °ÆÁ¤À» ÇÏÁö ¾Ê¾Æµµ µÈ´Ù.

º¯¼öÀÇ Ç¥Çö ¹üÀ§¸¦ ÃÊ°úÇÏ´Â Çö»ó°ú ¹Ý´ë·Î ÃÖ¼Ò Ç¥Çö¼ö¿¡ ¹ÌÄ¡Áö ¸øÇÏ´Â °æ¿ìµµ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. s, t, u´Â ¸ðµÎ ºÎÈ£¸¦ Ç¥ÇöÇÏÁö ¸øÇÏ´Â unsigned short·Î ¼±¾ðµÇ¾úÀ¸¸ç 20000À̶ó´Â °ªÀ» °¡Áö´Â s¿¡¼­ 30000À̶ó´Â °ªÀ» °¡Áö´Â t¸¦ »©¼­ u¿¡ ´ëÀÔÇß´Ù. u¿¡ ´ëÀԵǴ °ªÀº -10000ÀÌ ¾Æ´Ï¶ó 55536À̶ó´Â ¾ç¼ö°ªÀÌ µÇ¾î ¹ö¸°´Ù. unsigned shortÇüÀÌ Ç¥ÇöÇÒ ¼ö ÀÖ´Â ÃÖ¼Ò¼ö´Â 0Àε¥ ÀÌ °ªº¸´Ù ´õ ÀÛÀº °ªÀ» ´ëÀÔÇßÀ¸¹Ç·Î °è»ê °á°ú°¡ Ʋ·ÁÁö´Â °ÍÀÌ´Ù.

¼öÇÐÀûÀÎ ¿¬»êÀ» ÇÒ ¶§´Â Ç×»ó ÀÌ Á¡À» ÁÖÀÇÇØ¾ß ÇÑ´Ù. ¾ÆÁÖ °£´ÜÇÒ °Í °°Àº ¿¬»êµµ Á¤È®ÇÑ Å¸ÀÔ°ú ÇÔ²² »ç¿ëÇؾ߸¸ °á°ú°¡ Á¦´ë·Î ³ª¿Â´Ù. ¸Þ¸ð¸®°¡ Áö±ØÈ÷ ºÎÁ·ÇÑ »óȲÀÌ ¾Æ´Ñ ÇÑÀº Á¤¼ö°¡ ÇÊ¿äÇÒ ¶§ ºÎÈ£ ÀÖ´Â 4¹ÙÀÌÆ® Á¤¼öÀÎ int¸¦ »ç¿ëÇÏ¸é º° ¹®Á¦°¡ ¾ø´Ù. int´Â À½¾çÀ¸·Î 20¾ïÀ̶ó´Â ½Ç»ýÈ°¿¡¼­ °ÅÀÇ ºÎÁ·ÇÏÁö ¾Ê´Â Á¤µµÀÇ Ç¥Çö ¹üÀ§¸¦ °¡Áö°í Àֱ⠶§¹®ÀÌ´Ù.

Á¤¼öÇü ŸÀÔÀÇ µµÇ¥¸¦ º¸¸é int¿Í longÀº Å©±â³ª ºÎÈ£ ¿©ºÎ°¡ µ¿ÀÏÇÏ¸ç µû¶ó¼­ Ç¥ÇöÇÒ ¼ö ÀÖ´Â ¼öÀÇ ¹üÀ§µµ ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù. ¿Ö ¶È°°Àº ŸÀÔÀ» µÑ ¾¿À̳ª Á¤ÀÇÇØ ³õ¾Ò´ÂÁö ÀǾÆÇÏ°ÚÁö¸¸ ÀÌ µÑÀº ¾ö¹ÐÇÏ°Ô ¸»ÇÏ¸é ´Ù¸¥ ŸÀÔÀÌ´Ù. ¾Æ´Ï, ´Ù¸¥ ŸÀÔÀ̶ó±â º¸´Ù´Â ´Þ¶óÁú ¼ö Àִ ŸÀÔÀ̶ó°í ÇÏ´Â ÆíÀÌ ¿ÇÀ» °Í °°´Ù.

C ¾ð¾îÀÇ Å¸ÀÔ Á¤ÀÇ¿¡ int ÇüÀº "CPUÀÇ ·¹Áö½ºÅÍ¿Í µ¿ÀÏÇÑ Å©±â¸¦ °¡Áö´Â ŸÀÔ"À¸·Î Á¤ÀǵǾî ÀÖ´Ù. ·¹Áö½ºÅͶõ CPU³»ÀÇ Àӽà ±â¾ï Àå¼ÒÀÌ¸ç ·¹Áö½ºÅÍÀÇ Å©±â¿¡ µû¶ó CPUÀÇ ºñÆ® ¼ö¸¦ Á¤ÀÇÇÑ´Ù. Áï, ·¹Áö½ºÅÍ°¡ 16ºñÆ®À̸é 16ºñÆ® ÄÄÇ»ÅÍ, 32ºñÆ®À̸é 32ºñÆ® ÄÄÇ»ÅͶó°í ºÎ¸¥´Ù. ºñÆ® ¼ö°¡ ³ôÀ¸¸é ³ôÀ»¼ö·Ï CPU°¡ ÇÑ ¹ø¿¡ ó¸®ÇÒ ¼ö ÀÖ´Â ÀÚ·á¾çÀÌ ¸¹¾ÆÁö¹Ç·Î ´õ ¼º´ÉÀÌ ³ô´Ù°í ÇÒ ¼ö ÀÖ´Ù.

Áï, intÇüÀº CPU°¡ °¡Àå È¿À²ÀûÀ¸·Î ´Ù·ê ¼ö ÀÖ´Â Á¤¼öÇüÀ¸·Î Á¤ÀǵǾî ÀÖÀ¸¸ç ±×·¡¼­ intÇüÀÇ ½ÇÁ¦ Å©±â´Â Ç÷§Æû¿¡ µû¶ó ´Þ¶óÁø´Ù. ´ÙÀ½¿¡ ¾Ë¾Æº¼ Æ÷ÀÎÅÍÇüµµ ¸¶Âù°¡ÁöÀÌ´Ù. °ú°Å 8086À̳ª 80286°°Àº 16ºñÆ® CPU ½ÃÀý, À©µµ¿ìÁî 3.1°°Àº 16ºñÆ® ¿î¿µÃ¼Á¦¿¡¼­ int´Â 16ºñÆ®¿´¾ú´Ù. ±×·¯³ª 386ÀÌÈÄÀÇ CPU¿Í À©µµ¿ìÁî 95ÀÌÈÄÀÇ 32ºñÆ® ¿î¿µÃ¼Á¦¿¡¼­ int´Â 32ºñÆ®ÀÌ´Ù. 64ºñÆ® CPU°¡ ³ª¿À¸é(ÀÌ¹Ì ³ª¿Í ÀÖ´Ù) ±×¶§´Â intÇüÀÌ 64ºñÆ®(8¹ÙÀÌÆ®)°¡ µÉ °ÍÀÌ´Ù.

¹Ý¸é longÇüÀº ±× Å©±â°¡ 4¹ÙÀÌÆ®·Î °íÁ¤µÇ¾î ÀÖ¾î ¾î¶² Ç÷§Æû¿¡¼­³ª 4¹ÙÀÌÆ®ÀÌ´Ù. int¿Í longÀÌ µ¿ÀÏÇÑ Å©±â¸¦ °¡Áö´Â °ÍÀº 32ºñÆ® Ç÷§Æû¿¡¼­ »ÓÀ̸ç 16ºñÆ®¿¡¼­´Â ¼­·Î ´Ù¸¥ ŸÀÔÀÌ°í 64ºñÆ®¿¡¼­µµ ´Þ¶óÁú °ÍÀÌ´Ù. ²À 4¹ÙÀÌÆ®¸¦ ¾²°í ½ÍÀ¸¸é longÇüÀ¸·Î ¼±¾ðÇÏ°í Ç÷§ÆûÀÇ È¯°æ¿¡ µû¶ó ÀûÀýÇÑ Å©±â¸¦ ÀÚµ¿À¸·Î ¼±ÅÃÇÏ°í ½Í´Ù¸é intÇüÀ¸·Î ¼±¾ðÇÏ¸é µÈ´Ù.

ÃÖ±Ù 64ºñÆ® CPU°¡ ¹ßÇ¥µÇ°í Á¡Á¡ ´õ Å« ¼ö¸¦ ´Ù·ê ÀϵéÀÌ ¸¹¾ÆÁö¸é¼­ºÎÅÍ C¾ð¾îµµ 64ºñÆ®ÀÇ Á¤¼ö¸¦ Áö¿øÇϱ⠽ÃÀÛÇß´Ù. ºñÁÖ¾ó C++°ú Dev-C++Àº __int64¶ó´Â ŸÀÔÀ» Áö¿øÇϸç ÀÌ Å¸ÀÔÀ» »ç¿ëÇÏ¸é ¹«·Á 1800°æ(264)À̶ó´Â ¾öû³­ ¼ö¸¦ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº 64ºñÆ® Á¤¼ö¸¦ »ç¿ëÇÏ¿© ¾ï´ÜÀ§ÀÇ Á¤¼ö³¢¸® °öÇغ» °ÍÀÌ´Ù.

 

¿¹ Á¦ : int64

#include <Turboc.h>

 

void main()

{

     __int64 a,b,c;

 

     a=111111111;

     b=111111111;

     c=a*b;

     printf("%I64d\n",c);

}

 

ÈçÈ÷ ÀüÀÚ °è»ê±â¸¦ Å×½ºÆ®Çϱâ À§ÇØ ÀÏ·ÃÀÇ 1À» °öÇغ¸´Âµ¥ 12345678987654321À̶ó´Â °á°ú°¡ ³ª¿À¸é Á¦´ë·Î µ¿ÀÛÇÏ´Â °ÍÀÌ´Ù. printf·Î 64ºñÆ® Á¤¼ö¸¦ Ãâ·ÂÇÏ·Á¸é %I64d¶ó´Â ¼­½ÄÀ» »ç¿ëÇÑ´Ù.