Computer Science/System Programing

[์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ] ์ •์ˆ˜์˜ ํ‘œํ˜„

์ดํƒœํ™ 2022. 9. 24. 02:53

๐Ÿค” ์ •์ˆ˜์˜ ํ‘œํ˜„

์ปดํ“จํ„ฐ ๋‚ด๋ถ€(๋ฉ”๋ชจ๋ฆฌ, ๋ ˆ์ง€์Šคํ„ฐ)์— ๋ฐ์ดํ„ฐ๊ฐ€ ํ‘œํ˜„๋˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋ฐ”์ดํŠธ ์ €์žฅ ์ˆœ์„œ(Byte Ordering), ํ”„๋กœ๊ทธ๋žจ ์†Œ์Šค์ฝ”๋“œ, ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ฝ”๋“œ, ์ •์ˆ˜์˜ ํƒ€์ž…๋ณ€ํ™˜ ์บ์ŠคํŒ…, ์ •์ˆ˜์˜ ์—ฐ์‚ฐ ๋“ฑ์„ ์ค‘์‹ฌ์œผ๋กœ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

 

 

 

 

๐Ÿ”Ž ์ปดํ“จํ„ฐ์˜ ์›Œ๋“œ ๊ธธ์ด

์ปดํ“จํ„ฐ์˜ ์›Œ๋“œ ๊ธธ์ด ์ฆ‰ Word Size๋Š” ์ •์ˆ˜ ๊ฐ’์˜ ํฌ๊ธฐ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

๋˜ํ•œ ์ด๋Š” ์ฃผ์†Œ์˜ ๊ธธ์ด๊ฐ€ ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

๋Œ€๋ถ€๋ถ„ ์š”์ฆ˜ ์ปดํ“จํ„ฐ๋Š” 64bit(8byte) ์›Œ๋“œ๋กœ ์ด๋ค„์ง‘๋‹ˆ๋‹ค.

 

32bit ์ปดํ“จํ„ฐ๋Š” ์ฃผ์†Œ ๋ฒ”์œ„๊ฐ€ 4GB๋กœ ์ œํ•œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋งŽ์ด ํ•„์š”ํ•œ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์ œ์•ฝ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

$2^10 = 1024 = 1K$

$2^20 = 1024 * 1K = 1M$

$2^30 = 1024 * 1M = 1G$

$2^32 = 2^2 * 1G = 4G$

 

$n$bit ์ปดํ“จํ„ฐ๋Š” $2^n$ ๋ฐ”์ดํŠธ ๊นŒ์ง€ ์ฃผ์†Œ ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

 

 

 

์›Œ๋“œ ๊ธฐ๋ฐ˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

์ฃผ์†Œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ์˜ ๋ฐ”์ดํŠธ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š”๋ฐ ์›Œ๋“œ์˜ ์ฒซ๋ฒˆ์งธ ๋ฐ”์ดํŠธ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

 

์—ฐ์†๋œ ์›Œ๋“œ์˜ ์ฃผ์†Œ๋Š” 4(32๋น„ํŠธ ๋จธ์‹ ) ๋˜๋Š” 8(64๋น„ํŠธ ๋จธ์‹ )์”ฉ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

๐Ÿ”Ž ๋ฐ”์ดํŠธ ์ €์žฅ ์ˆœ์„œ(Byte Ordering)

์—ฌ๋Ÿฌ ๋ฐ”์ดํŠธ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ๋Š” ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ์ €์žฅ๋˜๋Š”์ง€,  ์ €์žฅ ๋˜๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ์–ด๋– ํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ง€ ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ์ €์žฅ๋˜๋Š” ์ง€์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•˜๊ธฐ ์œ„ํ•ด Big Endian๊ณผ Little Endian์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” LSB(Least Significant Byte)์— ๋Œ€ํ•œ ์ง€์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

LSB(Least Significant Bit)

LSB๋Š” ์ด์ง„ ์ •์ˆ˜์—์„œ ์ง์ˆ˜์ธ์ง€ ํ™€์ˆ˜์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋‹จ์œ„๊ฐ’์ด ๋˜๋Š” ๋น„ํŠธ ์œ„์น˜์ž…๋‹ˆ๋‹ค.

์ฆ‰, ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ํ˜•์—์„œ์˜ ๊ฐ€์žฅ ๋‚ฎ์€ ์œ„์น˜์˜ bit๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์ด์ง„์ˆ˜ ๊ฐ’ $10010101$์ด๋ผ๋Š” ๊ฐ’์ด ์žˆ์„ ๋•Œ ๊ฐ€์žฅ ์šฐ์ธก์˜ ๊ฐ’์ด LSB๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

LSB๋Š” ๊ฐ€์žฅ ๊ฐ’์ด ์ž‘์€ ๋น„ํŠธ์ธ $2^0$์ž๋ฆฌ์— ์œ„์น˜ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

์ด๋ฅผ ํ†ตํ•ด ์ด์ง„์ˆ˜ ์‹œ์Šคํ…œ์—์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ ํ˜•์— ๋“ค์–ด์žˆ๋Š” ์ˆซ์ž๊ฐ€ ์ง์ˆ˜์ธ์ง€ ํ™€์ˆ˜์ธ์ง€ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐ˜๋Œ€์˜ ๊ฐœ๋…์œผ๋กœ๋Š” MSB(Most Significant Bit)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

Big Endian

LSB(Least Significant Bit)๊ฐ€ ์ตœ๋Œ€ ์ฃผ์†Œ์— ์ €์žฅ๋˜๋Š” ๊ฒƒ์„Big Endian์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

๋ณ€์ˆ˜ $x$๊ฐ€ 16์ง„์ˆ˜ ๊ฐ’ $0x01234567$์ด๋ผ๋Š” 4๋ฐ”์ดํŠธ์˜ ์›Œ๋“œ๋ผ๊ณ  ํ–ˆ์„ ๋•Œ ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ด๋•Œ ์ตœ๋Œ€ ์ฃผ์†Œ์ธ $0x103$์— 67์ด ์ €์žฅ๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Big Endian์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์—๋Š” Sun, Mac, ์ธํ„ฐ๋„ท ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

Little Endian

LSB(Least Significant Bit)๊ฐ€ ์ตœ์†Œ ์ฃผ์†Œ์— ์ €์žฅ๋˜๋Š” ๊ฒƒ์„Little Endian์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์œ„์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ณ€์ˆ˜ $x$๊ฐ€ 16์ง„์ˆ˜ ๊ฐ’ $0x01234567$์ด๋ผ๋Š” 4๋ฐ”์ดํŠธ์˜ ์›Œ๋“œ๋ผ๊ณ  ํ–ˆ์„ ๋•Œ ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

์ด๋•Œ ์ตœ์†Œ ์ฃผ์†Œ์ธ $0x100$์— 67์ด ์ €์žฅ๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Little Endian์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์—๋Š” x86, ์•ˆ๋“œ๋กœ์ด๋“œ์™€ ios, Windows๋ฅผ ์‹คํ–‰ํ•˜๋Š” ARMํ”„๋กœ์„ธ์„œ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๋‹ค์Œ์˜ ์ฝ”๋“œ์—์„œ show_bytesํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, ์‹คํ–‰ํ•˜๋Š” ์ปดํ“จํ„ฐ์˜ ๋ฐ”์ดํŠธ ์ •๋ ฌ๋ฒ•์— ๋”ฐ๋ผ ํ™”๋ฉด์— ์ถœ๋ ฅ๋œ ๊ฐ’์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

int val = 0x87654321;
byte_pointer valp = (byte_pointer) &val;
show_bytes(valp, 1); /* A */
show_bytes(valp, 2); /* B */

 

๋”๋ณด๊ธฐ

sol) val์ด 16์ง„์ˆ˜ 8์ž๋ฆฌ์ด๋ฏ€๋กœ 64bit๋น„ํŠธ์˜ ์ปดํ“จํ„ฐ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

64bit์˜ ์ปดํ“จํ„ฐ๋Š” ์—ฐ์†๋œ ์›Œ๋“œ์˜ ์ฃผ์†Œ๊ฐ€ 8์”ฉ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ LSB๊ฐ€ ์ตœ์†Œ ์ฃผ์†Œ์— ์ €์žฅ๋˜๋Š” Little endian์˜ ๊ฒฝ์šฐ 87๋ถ€ํ„ฐ ์ถœ๋ ฅ๋˜๊ณ 

 

๋ฐ˜๋Œ€๋กœ LSB๊ฐ€ ์ตœ๋Œ€ ์ฃผ์†Œ์— ์ €์žฅ๋˜๋Š” Big endian์˜ ๊ฒฝ์šฐ 21 ๋ถ€ํ„ฐ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

 

A. Little endian : 87         Big endian : 21

B. Little endian : 87 65    Big endian : 21 43

 

 

 

 

 

 

 

 

 

 

 

 

 

๐Ÿ”Ž  2์ง„์ˆ˜ 16์ง„์ˆ˜ 10์ง„์ˆ˜์˜ ๋ณ€ํ™˜๊ณผ ์—ฐ์‚ฐ

2์ง„์ˆ˜ 16์ง„์ˆ˜ 10์ง„์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ด์–ด์ง„ ๊ฐ’๋“ค์„ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ์˜ˆ์ œ ๋ฌธ์ œ๋“ค์„ ํ’€์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

1. 0x39A7F8์„ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์‹œ์˜ค.

๋”๋ณด๊ธฐ

  3       9        A       7      F      8

0011 1001 1011 0111 1111 1000

 

 

2. 2์ง„์ˆ˜ 1100 0011 0101 0001์„ 16์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์‹œ์˜ค.

๋”๋ณด๊ธฐ

1100 0011 0101 0001

0xC    3       5       1

 

3. 0xD5E4C๋ฅผ 32๋น„ํŠธ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์‹œ์˜ค.

๋”๋ณด๊ธฐ

0x                          D      5       E       4      C

0000 0000 0000 1110 0101 1110 0100 1101

 

4. ์‹ญ์ง„์ˆ˜ 255๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์‹œ์˜ค.

 

5. 0x010E๋ฅผ ์‹ญ์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์‹œ์˜ค.

๋”๋ณด๊ธฐ

0x010E

16^0*14 + 16^2*1 = 14 + 256 = 270

 

 

 

 

 

๋น„ํŠธ์—ฐ์‚ฐ

์ด์ง„์ˆ˜ 01101001๊ณผ 01010101๋ฅผ ๋น„ํŠธ์—ฐ์‚ฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

&(AND), |(OR), ^(XOR), ~(NOT)

๋”๋ณด๊ธฐ

     01101001

&  01010101

     01000001 

   

 

     01101001

|    01010101

     01111101

 

 

    01101001

^  01010101

    00111100

 

 

~  01010101

    10101010

 

 

 

์‰ฌํ”„ํŠธ ์—ฐ์‚ฐ

Left Shift์˜ ํ‘œํ˜„์€ x << y์ด๋ฉฐ, ๋น„ํŠธ๋ฒกํ„ฐ x๋ฅผ ์™ผ์ชฝ์œผ๋กœ y์œ„์น˜๋งŒํผ ์ด๋™ํ•˜๋Š”๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋•Œ ์™ผ์ชฝ์— ์žˆ๋˜ ๋น„ํŠธ๋“ค์€ ์—†์–ด์ง€๊ณ  ์˜ค๋ฅธ์ชฝ์—๋Š” 0์œผ๋กœ ์ฑ„์›๋‹ˆ๋‹ค.

 

 

 

Right Shift์˜ ํ‘œํ˜„์€ x >> y์ด๋ฉฐ, ๋น„ํŠธ๋ฒกํ„ฐ x๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ y์œ„์น˜๋งŒํผ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋•Œ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋˜ ๋น„ํŠธ๋“ค์ด ์—†์–ด์ง‘๋‹ˆ๋‹ค.

 

Rigth Shift๋Š” ๋…ผ๋ฆฌ์‰ฌํ”„ํŠธ์™€ ์‚ฐ์ˆ ์‰ฌํ”„ํŠธ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. 

 

 

๋…ผ๋ฆฌ ์‰ฌํ”„ํŠธ๋Š” ์™ผ์ชฝ์˜ ๋น„ํŠธ๋ฅผ 0์œผ๋กœ ์ฑ„์šฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค

 

์‚ฐ์ˆ  ์‰ฌํ”„ํŠธ๋Š” ์™ผ์ชฝ์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋น„ํŠธ(MSB)๋ฅผ ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

Undefined Behavior์€ ์‰ฌํ”„ํŠธ์˜ ํฌ๊ธฐ๊ฐ€ ์Œ์ˆ˜์ด๊ฑฐ๋‚˜ ์›Œ๋“œ ๊ธธ์ด๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

ํ•ด๋‹น ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์–ด๋–ค ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

 

 

 

8๋น„ํŠธ๋กœ ํ‘œ์‹œํ•œ ๊ฐ’ x์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด left๋˜๋Š” right shift๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋”๋ณด๊ธฐ

 

0110 0011์„ ์‚ฐ์ˆ  ์‰ฌํ”„ํŠธ ํ–ˆ์„ ๋•Œ MSB์˜ ๊ฐ’์€ 0์ด๋ฏ€๋กœ 0000 0110์ด ๋ฉ๋‹ˆ๋‹ค.

1001 0101์„ left shiftํ–ˆ์„ ๋•Œ ์˜ค๋ฅธ์ชฝ ๋น„ํŠธ๋Š” 0์œผ๋กœ ์ฑ„์›Œ์ง€๋ฏ€๋กœ ๊ฐ’์€ 0101 0000์ด ๋ฉ๋‹ˆ๋‹ค.

1001 0101์„ ๋…ผ๋ฆฌ ์‰ฌํ”„ํŠธ ํ–ˆ์„ ๋•Œ ์™ผ์ชฝ ๋น„ํŠธ๋Š” 0์œผ๋กœ ์ฑ„์›Œ์ง€๋ฏ€๋กœ ๊ฐ’์€ 0000 1001์ด ๋ฉ๋‹ˆ๋‹ค.