์ปดํจํฐ์ ์๋ ๊ธธ์ด
๋ชจ๋ ์ปดํจํฐ๋ ์๋(word) ํฌ๊ธฐ๋ฅผ ๊ท๊ฒฉ์ผ๋ก ๊ฐ์ง๊ฒ ๋๋๋ฐ, ์ด๋ ๋ฉ๋ชจ๋ฆฌ์์ ๋ ์ง์คํฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธฐ๊ฑฐ๋,
ALU์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๊ฑฐ๋ ํ ๋, ํ๋์ ๋ช ๋ น์ด๋ก ์คํ๋ ์ ์๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋จ์์ ๋๋ค.
ํ๋์ ๊ฐ์์ฃผ์๋ ํ ๊ฐ์ ์๋๋ก ์ธ์ฝ๋ฉ๋ฉ๋๋ค.
์ฆ ์ด ์๋ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ๋ ๊ฐ์ฅ ์ค์ํ ์์คํ ๋ณ์๊ฐ ๊ฐ์ ์ฃผ์๊ณต๊ฐ์ ์ต๋ ํฌ๊ธฐ์ ๋๋ค.
$\omega $ ๋นํธ ์๋ ํฌ๊ธฐ๋ฅผ ๊ฐ๋ ์ปดํจํฐ์์, ๊ฐ์์ฃผ์๋ 0์์ $2^\omega - 1$ ์ ๋ฒ์๋ฅผ ๊ฐ์ง๋ฉฐ, ํ๋ก๊ทธ๋จ์ ์ต๋ $2^\omega$ ๋ฐ์ดํธ์ ์ ๊ทผํ ์ ์๊ฒ ๋ฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด 32๋นํธ ์ปดํจํฐ์์ ์ฃผ์ ๋ฒ์๋ 4GB๋ก ์ ํ๋๋ฉฐ, 64๋นํธ ์๋ ์ปดํจํฐ๋ 16 ์์ฌ๋ฐ์ดํธ(EB), x86-64 ์ปดํจํฐ๋ 48๋นํธ ์ฃผ์๋ฅผ ์ง์ํ๋ฏ๋ก 256 ํ ๋ผ๋ฐ์ดํธ(TB)๋ก ์ ํ๋ฉ๋๋ค.
๋๋ถ๋ถ์ 64๋นํธ ์ปดํจํฐ๋ค์ ์ญ๋ฐฉํฅ ํธํ์ฑ์ ๊ฐ์ง๊ณ ์์ด 32๋นํธ ๋จธ์ ๋ค์ ์ํด ์ปดํ์ผ๋ ํ๋ก๊ทธ๋จ๋ค๋ ์คํํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด๋ค ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๊ธฐ๊ณ์ ์ข ๋ฅ๊ฐ ์๋, ํ๋ก๊ทธ๋จ์ด ์ด๋ป๊ฒ ์ปดํ์ผ๋์๋๊ฐ์ ๋ฐ๋ผ 32๋นํธ ํ๋ก๊ทธ๋จ ๋๋ 64๋นํธ ํ๋ก๊ทธ๋จ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์ฃผ์์ง์ ๊ณผ ๋ฐ์ดํธ Ordering
์ฌ๋ฌ ๋ฐ์ดํธ๋ก ์ด๋ฃจ์ด์ง ํ๋ก๊ทธ๋จ ๊ฐ์ฒด๋ค์ ์์ด์, ์ฐ๋ฆฌ๋ ๋ ๊ฐ์ง์ ๊ด์ต(๊ฐ์ฒด์ ์ฃผ์๋ ์ด๋ป๊ฒ ์ง์ ๋์ด์ผ ํ๋์ง์, ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํธ๋ค์ ์ด๋ป๊ฒ ์ ๋ ฌํด์ผ ํ๋์ง)์ ์ค์ ํด์ผ ํฉ๋๋ค.
๊ฑฐ์ ๋ชจ๋ ์ปดํจํฐ์์ ์ฌ๋ฌ ๋ฐ์ดํธ๋ก ์ด๋ฃจ์ด์ง ๊ฐ์ฒด๋ ์ฐ์๋ ๋ฐ์ดํธ์ ์ ์ฅ๋๋ฉฐ, ๊ฐ์ฒด์ ์ฃผ์๋ ์ฌ์ฉ๋ ๋ฐ์ดํธ์ ์ต์ ์ฃผ์๋ก ์ ํฉ๋๋ค.
์ฆ ์ฃผ์์ ๊ธฐ๋ณธ ๋จ์๊ฐ ๋ฐ์ดํธ์ธ ๊ฒ์ ๋๋ค.
์ด๋ค ๊ฐ์ฒด๋ฅผ ๋ํ๋ด๋ ๋ฐ์ดํธ๋ค์ ์ ๋ ฌํ๋ ๋ฐ๋ ๋ ๊ฐ์ง ์ผ๋ฐ์ ์ธ ๊ด์ต(Big Endian, Little Endian)์ด ์กด์ฌํฉ๋๋ค.
๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ธฐ ์ํด์๋ Least Significant Byte์ ๋ํ ์ดํด๊ฐ ํ์ํฉ๋๋ค.
Least Significant Byte
์๋ฅผ ๋ค์ด $\omega$-๋นํธ ์ ์๊ฐ ์๋ค๊ณ ํ๊ฒ ์ต๋๋ค.
ํด๋น ์ ์๋ [ $x_{\omega-1}$, $x_{\omega-2}$, ..., $x_1$, $x_0$ ]๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
์ด๋ $x_{\omega-1}$ ์ ๊ฐ์ฅ ์ค์ํ ๋นํธ(Most Significant Bit)์ด๊ณ , $x_0$ ์ ๊ฐ์ฅ ๋ ์ค์ํ ๋นํธ(Least Significant Bit) ์ ๋๋ค.
$\omega$ ๊ฐ 8์ ๋ฐฐ์์ธ ๊ฒฝ์ฐ, ํด๋น ๋นํธ๋ค์ ๋ฐ์ดํธ๋ก ๋๋ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ฐ์ฅ ๋ ์ค์ํ ๋ฐ์ดํธ(Least Significant Byte)๋ [ $x_7$, $x_6$, ..., $x_1$, $x_0$ ]์ ๊ฐ์ง๋๋ค.
๋น ์๋์๊ณผ ๋ฆฌํ ์๋์
๊ฐ์ฅ ๋ ์ค์ํ ๋ฐ์ดํธ๊ฐ ์ต๋ ์ฃผ์์ ์ ์ฅ๋๋ ๋ฐฉ์์ ๋น ์๋์(Big Endian)์ด๋ผ ํ๋ฉฐ,
๊ฐ์ฅ ๋ ์ค์ํ ๋ฐ์ดํธ๊ฐ ์ต์ ์ฃผ์์ ์ ์ฅ๋๋ ๋ฐฉ์์ ๋ฆฌํ ์๋์(Little Endian)์ด๋ผ ํฉ๋๋ค.
Sun, Mac, ์ธํฐ๋ท ๋ฑ์์๋ Big Endian์,
x86, ์๋๋ก์ด๋์ ios, windows๋ฅผ ์คํํ๋ ARM ํ๋ก์ธ์์์๋ Little Endian์ ์ฌ์ฉํฉ๋๋ค.
์์
typedef unsigned char * pointer;
void show_bytes(pointer start, int len) {
int i;
for (i = 0; i < len; i ++) {
printf("0x%p\t0x%.2x\n", start + i, start[i]);
}
printf("\n");
}
int main(void) {
int a = 15213;
printf("int a = 15213; \n"); // 00 00 3b 6d
show_bytes((pointer) &a, sizeof(int));
return 0;
}
์ฌํํธ ์ฐ์ฐ
C ์ธ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ช ํ์๋ฉด, C์์๋ ๋นํธ๋ฅผ ์ข์ฐ๋ก ์ด๋์ํค๋ ์ฌํํธ ์ฐ์ฐ๋ค์ ์ ๊ณตํฉ๋๋ค.
์ฌํํธ ์ฐ์ฐ์ ํฌ๊ฒ Left Shift ์ฐ์ฐ๊ณผ Right Shift ์ฐ์ฐ์ผ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค.
Left Shift
$$x << y$$
๋นํธ๋ฐฑํฐ x๋ฅผ ์ผ์ชฝ์ผ๋ก y๋ฒ ์ด๋์ํต๋๋ค.
์ด๋ ์ผ์ชฝ ๋ ๋นํธ(๊ฐ์ฅ ์ค์ํ ๋นํธ)๋ ์์ด์ง๋ฉฐ, ์ค๋ฅธ์ชฝ ๋ ๋นํธ(๊ฐ์ฅ ๋ ์ค์ํ ๋นํธ)๋ 0์ผ๋ก ์ฑ์์ง๋๋ค.
x | 01100010 |
<< 3 | 00010000 |
Right Shift
๋นํธ๋ฒกํฐ x๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก y ์์น ์ด๋ํฉ๋๋ค.
์ค๋ฅธ์ชฝ์ ์๋ ๋นํธ๋ค์ ์์ด์ง๋ฉฐ, ์ผ์ชฝ ๋นํธ๋ค์ด ์ฑ์์ง๋ ๋ฐฉ์์ ๋ฐ๋ผ ๋ ผ๋ฆฌ ์ฌํํธ์ ์ฐ์ ์ฌํํธ๋ก ๋ถ๋ฆฌ๋ฉ๋๋ค.
๋ ผ๋ฆฌ ์ฌํํธ๋ ์ผ์ชฝ ๋นํธ๋ฅผ 0์ผ๋ก ์ฑ์๋๋ค.
์ฐ์ ์ฌํํธ๋ ์ผ์ชฝ ๋นํธ๋ฅผ ๊ฐ์ฅ ์ค์ํ ๋นํธ๋ก ๋ณต์ ํฉ๋๋ค.
์์๋ ์๋์ ๊ฐ์ต๋๋ค.
x | 01100010 |
๋ ผ๋ฆฌ์ >> 2 | 00011000 |
์ฐ์ ์ >>2 | 00011000 |
x | 10100010 |
๋ ผ๋ฆฌ์ >> 2 | 00101000 |
์ฐ์ ์ >>2 | 11101000 |
์์์ ํํ
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ถํธ๊ฐ ์๋ ์ซ์๋ฅผ ์ปดํจํฐ์์ ํ์ํ๊ธฐ ์ํด 2์ ๋ณด์ ํ์์ ์ฌ์ฉํฉ๋๋ค.
๋น๋ถํธํ(Unsigned) ์ ์์ ๊ฒฝ์ฐ์๋ ์ ์ X์ ๊ฐ ๋นํธ $x_i$ ์ ๋ํ์ฌ, ๋ค์๊ณผ ๊ฐ์ด X์ ๊ฐ์ ๊ตฌํ ์ ์์์ต๋๋ค.
$$\sum^{w-1}_{i=0} x_i \cdot 2^i$$
๊ทธ๋ฌ๋ 2์ ๋ณด์๋ฅผ ํตํ ์์์ ๊ฒฝ์ฐ์๋, ๊ฐ์ฅ ์ค์ํ ๋นํธ(MSB)์ ๊ฐ์ -๋ฅผ ๋ถ์ฌ ๊ณ์ฐํฉ๋๋ค.
$$-x_{w-1} \cdot 2^{w-1} + \sum^{w-2}_{i=0} x_i \cdot 2^i$$
์ด๋ ๊ฐ์ฅ ์ค์ํ ๋นํธ์ธ $x_{w-1}$ ์ ๋ถํธ ๋นํธ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์ ์๋ฅผ ํ์ํ๋ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ค์น | 5 (0101) | - 5 (1011) | ||
$1 \; (2^0)$ | 1 | 1 | 1 | 1 |
$2 \; (2^1)$ | 0 | 0 | 1 | 2 |
$4 \; (2^2)$ | 1 | 4 | 0 | 0 |
$8 \; (2^3)$ | 0 | 0 | 1 | -8 |
ํฉ | 5 | -5 |
์ ์์ ํํ ๋ฒ์
๋น๋ถํธํ ์ ์์ ๊ฒฝ์ฐ, ๊ธธ์ด๊ฐ $w$ ๋นํธ์ธ ์ ์์ ๋ฒ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ต์ : 0
์ต๋ : $2^{w} -1$
๋ถํธํ ์ ์์ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ต์ : $-2^{w-1}$
์ต๋ : $2^{w-1} -1$
์ด๋ -1์ ํ์๋ ์ด๋ ํ ๊ฒฝ์ฐ์๋ 111...1 ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
๋น๋ถํธํ๊ณผ ๋ถํธํ์ ์์ ๊ณ์ฐ
C ์ธ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก, signed์ unsigned ๊ฐ๋ค์ด ํ ๊ฐ์ ์์ ๋ด์ ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋,
๋ฌต์์ ์ผ๋ก Unsigned๋ก ๋ฐ๋์ด ์์์ ๊ณ์ฐํฉ๋๋ค.
์๋ฅผ ๋ค์ด 32๋นํธ ์ ์์ ์ฌ๋ฌ ์์ ๊ฒฐ๊ณผ๋ฅผ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
'๐ฅ Computer Science > ์์คํ ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ์ด์ ๋ธ๋ฆฌ์ด[2] - ์กฐ๊ฑด๋ฌธ (2) | 2022.10.12 |
---|---|
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ์ด์ ๋ธ๋ฆฌ์ด [1] (2) | 2022.10.10 |
[์์คํ ํ๋ก๊ทธ๋๋ฐ] - 2022๋ ๋ Datalab (0) | 2022.10.04 |
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ์์์ ํํ (๋ถ๋์์์ ) (0) | 2022.10.02 |
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ์ปดํจํฐ ์์คํ (0) | 2022.09.17 |