๐ค ์ ์์ ํํ
์ปดํจํฐ ๋ด๋ถ(๋ฉ๋ชจ๋ฆฌ, ๋ ์ง์คํฐ)์ ๋ฐ์ดํฐ๊ฐ ํํ๋๋ ๋ฐฉ์์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ฐ์ดํธ ์ ์ฅ ์์(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๋ฅผ ์ด์ง์๋ก ๋ณํํ์์ค.
255
1111 1111
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์ด ๋ฉ๋๋ค.
'Computer Science > System Programing' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์์คํ ํ๋ก๊ทธ๋๋ฐ] BombLab ์ค์ต ๋ฉ๋ชจ์ฅ (2) | 2022.10.19 |
---|---|
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ์ค์์ ํํ ๋ฐ ์ฒ๋ฆฌ (0) | 2022.09.26 |
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ์ ์์ ํํ ๋ฐฉ๋ฒ (0) | 2022.09.24 |
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ์ปดํจํฐ ์์คํ (์ปดํจํฐ ๊ตฌ์กฐ) (0) | 2022.09.20 |
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ์ปดํจํฐ ์์คํ (์ปดํ์ผ ์์คํ ) (0) | 2022.09.20 |