¼ýÀÚ¸¦ ¹®ÀÚ¿·Î º¯È¯ÇÏ´Â ¹æ¹ý
°³¿ä ¶¾î¼Àºí¸®(Assembly) ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Ù°¡ º¸¸é Register ¶Ç´Â Memory¿¡ ÀúÀåµÈ ¾î¶² °á°ú°ªÀ» ȸ鿡 Ç¥½ÃÇØ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. À̶§ ÀúÀåµÈ °á°ú°ªÀ» °¢ Áø¹ý¿¡ ¸Â´Â ÀÚ¸´¼ö ´ÜÀ§·Î ¹®ÀÚÈÇÏ´Â º¯È¯ÀÌ ÇÊ¿äÇÏ´Ù.
Áï, 1234¶ó´Â 10Áø¼öÀÇ °á°ú°ªÀÌ ÀúÀåµÇ¾î ÀÖÀ»¶§ ȸ鿡 10Áø¼ö·Î Ãâ·ÂÇϱâ À§Çؼ´Â 1, 2, 3, 4·Î ÀÚ¸´¼ö·Î ºÐ¸®ÇÏ°í ȸ鿡 Ãâ·ÂÇϱâ À§ÇÑ Ascii°ªÀ¸·Î º¯È¯ÇÏ´Â °úÁ¤ÀÌ ÇÊ¿äÇÏ´Ù. À̶§ ¼ýÀÚ 0Àº Ascii 16Áø¼ö°ªÀ¸·Î 30H¿¡ ÇØ´çÇÏ°í 1Àº 31H, ... 9´Â 39H°¡ µÈ´Ù. Áï, ºÐ¸®µÈ 1, 2, 3, 4¸¦ ȸ鿡 Ãâ·ÂÇÏ·Á¸é 31H, 32H, 33H, 34H ·Î Ãâ·ÂÀ» ÇØ¾ß ÇÑ´Ù´Â ÀǹÌÀÌ´Ù. ÀÌ·Ð ¶°¢ ÀÚ¸´¼ö¸¦ ºÐ¸®ÇÏ·Á¸é ¾î¶»°Ô ÇÏ¸é µÉ±î? ¾î¶°ÇÑ °ª x°¡ ÀÖÀ»¶§ ÀÌ°ÍÀ» zÁø¹ýÀ¸·Î ÀÚ¸´¼ö¸¦ ºÐ¸®ÇÏ·Á¸é
y = x % z ¿Í °°ÀÌ ³ª¸ÓÁö¸¦ ÃëÇÏ¿© °¡Àå ³·Àº ÀÚ¸´¼ö¸¦ ±¸ÇÒ¼ö ÀÖ´Ù. ±×¸®°í ´ÙÀ½ÀÚ¸´¼ö¸¦ ±¸Çϱâ À§Çؼ x = x / z (½Ç¼ö³ª´°¼ÀÀÌ ¾Æ´Ï°í Á¤¼ö³ª´°¼ÀÀ¸·Î ¼Ò¼ýÁ¡Àº ¹ö¸°´Ù)À¸·Î ¹æ±Ý ±¸Çß´ø °¡Àå ³·Àº ÀÚ¸´¼ö¸¦ ¶³±Å¹ö¸±¼ö ÀÖ´Ù. ÀÌ¿Í °°Àº ¹æ¹ýÀ» ¹Ýº¹ÇÏ¿© x°¡ 0ÀÌ µÉ¶§±îÁö ¹Ýº¹ÇÏ¸é °¢ ÀÚ¸´¼ö°¡ Çϳª¾¿ »Ì¾ÆÁ® ³ª¿À°Ô µÇ´Â°ÍÀÌ´Ù.
Á¶±Ý ÀÀ¿ëÇÏ¿© ¿¹¸¦ µé¾îº¸ÀÚ. ¸¸¾à 10Áø¼ö·Î 5¶ó´Â ¼ýÀÚ°¡ ÀÖ´Ù. ÀÌ°ÍÀ» 2Áø¹ýÀ¸·Î ÀÚ¸´¼ö¸¦ ºÐ¸®ÇÏ·Á¸é ¾î¶»°Ô ÇÒ±î? ¸ÕÀú y = 1 = 5 % 2 ÀÌ´Ù. ÀÌ°ÍÀÌ °¡Àå ³·Àº ÀÚ¸´¼ö°¡ µÈ´Ù. ±×¸®°í x = 2 = 5 / 2 °¡ ´ÙÀ½ °è»êÇÒ °ªÀÌ µÈ´Ù. ÀÌÁ¦ ´Ù½Ã y = 0 = 2 % 2 ¿Í °°ÀÌ ¹Ø¿¡¼ µÎ¹ø° ÀÚ¸´¼ö°¡ µÈ´Ù. ´Ù½Ã x = 1 = 2 / 2 ÀÌ µÇ°í y = 1 = 1 % 2 ¿Í °°ÀÌ ¹Ø¿¡¼ ¼¼¹ø° ÀÚ¸´¼ö°¡ µÈ´Ù. ´Ù½Ã x = 0 = 1 / 2 °¡ µÇ¾î 0ÀÌ µÇ¹Ç·Î ³¡ÀÌ ³´Ù. °á±¹ 1, 0, 1·Î ÀÚ¸´¼ö°¡ ºÐ¸®µÇ¸ç À̸¦ Ascii·Î °¢ ÀÚ¸´¼ö¸¦ º¯È¯Çϸé 31H, 30H, 31H°¡ µÇ°Ô µÈ´Ù.
ÀÌ°ÍÀ» C¾ð¾î·Î Ç¥ÇöÇÏ¸é °£´ÜÈ÷ ´ÙÀ½°ú °°Àº ªÀº ÇÔ¼ö°¡ ÀÛ¼ºµÉ¼ö ÀÖ´Ù. char * int_to_string(unsigned int s_value /* º¯È¯ÇÏ°íÀÚ ÇÏ´Â °ªÀ» ÀԷ¹޴´٠*/, int s_radix /* ¿øÇÏ´Â Áø¹ý¼ö ÀԷ¹޴´٠*/) { /* ¹è¿À» È°¿ëÇÏ¿© 0¹ø° À妽º´Â 30H°¡ µÇ´Â ½ÄÀ¸·Î ÀÚ¸´¼ö¸¦ Ascii·Î º¯È¯ÇÏ´Â Å×À̺íÀ» ¼±¾ðÇÑ´Ù. */ static const char c_base_ascii[] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 'A', 'B', 'C', 'D', 'E', 'F'}; /* C¾ð¾î¿¡¼ ¹®ÀÚ¿À» ¹ÝȯÇϱâ À§Çؼ static ¸Þ¸ð¸® °ø°£ÀÌ ÇÊ¿äÇÏ´Ù. ÇÏÁö¸¸ Thread»óȲ¿¡¼ »ç¿ëÇÒ°ÍÀ̶ó¸é mallocÀ¸·Î ÇÒ´çÇÏ¿© ¹ÝȯÇØ¾ß ÇÑ´Ù. ¿©±â¼´Â ´ÜÁö ¿¹Á¦¸¦ º¸À̱â À§ÇØ °£´ÜÇÏ°Ô staticÀ» Àâ¾ÒÀ»»ÓÀÌ´Ù. ¾Æ·¡¿¡¼ buffer¸¦ ¾î¶»°Ô ¹ÝȯÇÏ´ÂÁö °¢ÀÚ À¯½ÉÈ÷ º¸±â¸¦ ¹Ù¶õ´Ù */ static char s_buffer[ 64 ] = {0, }; /* bufferÀÇ ³¡À» °¡¸£Å°´Â°ÍÀ¸·Î offsetÀ» ½ÃÀÛÇÑ´Ù. */ size_t s_offset = sizeof(s_buffer) - 1; do { s_buffer[--s_offset] = c_base_ascii[ s_value % s_radix /* y = x % z */ ]; s_value /= s_radix; /* x = x / z */ }while(s_value != 0u); /* °ªÀÌ 0ÀÌ µÉ¶§±îÁö ¹Ýº¹ */ return((char *)(&s_buffer[s_offset])); } ¿¹Á¦ ¶
|
One man tells a falsehood, a hundred repeat it as true. |