익명 사용자
로그인하지 않음
계정 만들기
로그인
youngwiki
검색
컴퓨터에서의 수 표현 문서 원본 보기
youngwiki
이름공간
문서
토론
더 보기
더 보기
문서 행위
읽기
원본 보기
역사
←
컴퓨터에서의 수 표현
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
==개요== 본문에서는 컴퓨터가 정수를 표현하는 방식에 대해서만 다룬다. ==0보다 작은 정수 표현하기== ===sign-magnitude=== 첫번째 bit를 부호를 지정하는sign bit로 사용하는 방식이다. * sign bit 0: 양수 01010101<sub>2</sub> = +85<sub>10</sub> * sign bit 1: 음수 11010101<sub>2</sub> = -85<sub>10</sub> 장점과 단점이 존재한다. ===2의 보수법=== 2의 보수법(Two's Complement)이란 각각의 bit를 다음의 방식으로 해석하는 표현법이다. <math>x_{w-1}\cdot(-2^{w-1})+\sum_{n=0}^{w-2}{x_i\cdot2^i}</math> 이때 2의 보수법을 적용하는 2진수에서의 first bit를 MSB(Most Significant Bit)라고 한다. MSB가 1이면 음수, 0이면 0이상의 정수이다. 아래는 2의 보수법을 적용하여 해석한 2진수이다. * 0b01010 = 0 + 8 + 2 + 0 = 10 * 0b10110 = -16 + 0 + 4 + 2 + 0 = -10 ===Unsigned vs Signed=== 2의 보수법을 적용하여 동일한 2진 벡터를 다른 방식으로 해석할 수 있다. 아래는 그 예시이다. * unsigned: 0b10110 = 16 + 0 + 4 + 2 + 0 = 22 * 2의 보수법: 0b10110 = -16 + 0 + 4 + 2 + 0 = -10 서로 다른 해석법 때문에 2진 벡터의 길이가 w일 때 unsigned 해석법과 2의 보수법은 각각 다른 범위를 가진다. * unsigned 범위: 0 ~ 2<sup>w</sup>-1 * 2의 보수법 범위: -2<sup>w-1</sup> ~ 2<sup>w-1</sup> - 1 이때 x > 0이라면, 2의 보수법으로 해석된 음의 정수 -x를 unsigned 방식으로 해석하면 2<sup>w</sup>-x에 대응한다. * B2S<sub>w</sub>(1011) = -5, B2U<sub>w</sub>(1011) = 11 ====Unsigned와 Signed 사이의 변환==== [[파일:TypeCasting.png|섬네일|300x300픽셀]] signed 정수와 unsigned 정수사이에서의 변환은 해당 정수의 bit 패턴을 재해석하여 이루어진다. 오른쪽 그림은 컴퓨터 내에서 explicit 타입 변환이 어떤 방식으로 이루어지는지 보여준다. <ref>U2B: unsigned 정수를 bit 벡터로 해석 B2S: bit 벡터를 signed 정수로 해석 S2B: signed 정수를 bit 벡터로 해석 B2U: bit 벡터를 unsigned 정수로 해석</ref> 또한 Unsigned 정수와 Signed 정수 사이의 변환에는 다음과 같은 관계가 성립한다. * S2U(x) = x + 2<sup>w</sup> <math>\times</math> MSB(x) * U2S(x) = x - 2<sup>w</sup> <math>\times</math> MSB(x) 또한 C에서의 형변환은 implicitly하게 발생하기도 한다. 예를 들어서 signed 정수와 unsigned 정수가 한 수식 내에서 혼용되어 사용된다면, signed 정수는 unsigned 정수로 암묵적으로 형변환된다.<ref>기본적으로 10과 같은 정수 문자열은 signed로 해석된다. 이를 unsigned로 표현하고자 할 때는 10U와 같이 말미에 'U'를 사용하여야 한다.</ref> ===정수의 연산=== [[파일:UnsignedAdd.png|테두리|프레임없음|500x500픽셀]] unsigned 정수의 덧셈은 bit sequence를 각각의 자릿수에 맞는 bit끼리 더하고 받아올림값이 있다면 이를 적용하며 수행한다.. 이때 carry output이라고 하는 w를 초과하는 자릿수에 해당하는 받아올림값은 무시한다. 이는 결과적으로 modular sum<ref>UAdd<sub>w</sub>(U, V) = (u + v) mod 2<sup>w</sup></ref>에 해당한다. [[파일:SignedAdd.png|테두리|프레임없음|500x500픽셀]] signed 정수의 덧셈 또한 unsigned 정수의 덧셈과 거의 유사한 형태로 수행한다. bit sequence의 연산은 unsigned 정수와 동일한 방식으로 하되, 그 결과의 해석을 2의 보수법으로 하면 되는 것이다. signed 정수의 뺄셈은 x - y를 x + ~y + 1의 형태로 해석한다. 이는 Neg<sub>w</sub>y = ~y + 1과 같기 때문이다. unsigned 정수의 뺄셈은 x - y를 x + Neg<sub>w</sub>y의 형태로 해석한다. 이때 Neg<sub>w</sub>y = 2<sup>w</sup>-1이므로 UAdd<sub>w</sub>(x, Neg<sub>w</sub>y) = (x + 2<sup>w</sup> - 1) mod 2 = (x - y) mod 2와 같이 계산된다. 즉 이를 x와 y의 대소 관계에 따라 정리하면 다음과 같다. * If x <math>\ge</math> y, then x - y * If x < y, then x - y + 2<sup>w</sup> (negative overflow) 이때 unsiged와 signed 정수를 연산할 때 그 범위를 초과하는 경우를 Overeflow라고 한다. unsiged 정수의 경우는 덧셈할 때 발생할 경우에는 carry bit를 drop하여 2<sup>w</sup>을 그 결과에서 뺀 것과 같은 결과를 낸다. 또한 뺄셈할 때 발생할 경우에는 가상의 carry bit를 borrow하여 2<sup>w</sup>를 그 결과에 더한 것과 같은 결과가 나온다. 다음은 unsigned 정수의 overflow에 대한 예시이다. * Addition: 0b1111 + 0b0010 = 0b0001 * Substraction: 0b0001 - 0b0010 = 0b1111 signed 정수의 overflow은 양수끼리 더할 때<ref>양수에서 음수를 뺐을 때</ref> 결과가 음수로 나오거나, 음수끼리 더했을 때<ref>음수에서 양수를 뺐을 때</ref> 그 결과가 양수로 변하여 발생한다. 다음은 signed 정수의 overflow에 대한 예시이다. * Addition: 0b0110 + 0b0011 = 0b1001 * Substraction: 0b1001 - 0b0011 = 0b0110 ==기타== ===zero extension=== * unsigned 정수의 경우 ** Task: w-bit unsigned 정수인 x가 주어졌을 때, 이를 동일한 값을 가지는 (w+k)-bit의 수로 변호나하는 것 ** 더 상위의 k bit를 단순히 0으로 채운다. * signed 정수의 경우 ** Task: w-bit signed 정수인 x가 주어졌을 때, 이를 동일한 값을 가지는 (w+k)-bit의 수로 변호나하는 것 ** 더 상위의 k bit를 MSB와 동일한 bit로 채운다. ==각주== [[분류:컴퓨터 시스템]]
컴퓨터에서의 수 표현
문서로 돌아갑니다.
둘러보기
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
위키 도구
위키 도구
특수 문서 목록
문서 도구
문서 도구
사용자 문서 도구
더 보기
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
문서 기록