양의 정수 음의 정수
양의 정수 : 10진수를 2진수로만 바꾸어 메모리에 저장하면 된다.
but
음의 정수는 어떻게 표현하지 ??
보통 최상위 비트를 부호 비트로 사용한다고 한다.
즉 맨 첫번째 비트가 0이면 양의 정수 , 최상위 비트가 1이면 음의정수를 의미한다.
근데 왜 1000 0011 이 -125 지 ??
부호비트가 1이고 나머지 비트들이 3을 나타내므로 -3 이라고 생각했다.
cpu내부는 덧셈 회로를 이용하여 뺄셈을 한다고 한다.
즉 3-3을 3+(-3)으로 변경해서 연산을 실행한다.
그렇다면 0000 0011 + 1000 0011 을 내가 생각한대로 더하면 -6으로 계산되어 이상하다 . 값이 0 이 나와야하는데 -6이 나오는 기이한 현상이 생긴다.
2의 보수
덧셈이나 뺄셈을 할 때 부호에 신경 쓰지 않고 무조건 2진수 덧셈만 하면 되는 음수 표현 방법이 없나 ??
그것이 2의 보수라고 한다.
2의 보수를 구하기 위한 방법은 2진수의 각 비트를 반전시킨 후에 (1->0 , 0->1) 1을 더한다 .
2의 보수를 사용하면 부호 비트에 신경 쓸 필요 없이 어떤 부호든지 그냥 2진수 덧셈을 하면 된다 .
컴퓨터에서 실수를 나타내는 방법
고정 소수점형 : 소수점 위치를 고정시키고 정수부를 위해 일정 비트를 할당하고 소수부를 위해 일정 비트를 할당하는 방식
ㄴ 간단하고 알기 쉽지만 과학과 공학에서 필요한 아주 큰 수를 표현할수 없다.
부동 소수점형 : 소수점의 위치가 떠서 움직인다는 뜻이다. 소수점의 위치를 움직임으로써 한정된 비트로 정밀도를 보다 높게 표현할 수 있다.
아주 큰 정수와 아주 작은 소수의 표현이 가능하다.
이렇게 가수와 지수를 따로 표현하게 되면 표현할 수 있는 실수의 범위가 대폭 늘어난다.
C에서는 float, double, long double의 3가지 자료형으로 실수를 나타낸다.
실수를 출력하는 형식 지정자
실수를 출력하는 기본적인 형식 지정자는 %f다.
ㄴ 주의할 점 : 실수 출력시 기본적으로 소수점 6자리만 출력 . 6자리넘으면 반올림
printf("%f", 0.123456789); // 0.123457 출력
실수에서 소수점 이하 자리수를 제한하려면 %10.3f와 같이 적어주어야 한다.
전체 10자리 중에서 소수점 이하를 3자리로 하라는 것을 의미한다.
printf("%e" , 0.123456789); // 1.234568e-001 출력
실수를 지수표기법으로 출력하려면 %e or %E를 사용한다.
지수 부분을 나타내는 문자가 소문자인지 대문자인지에 따라서 %e or %E를 결정한다.
float형의 유효숫자 대략 처음 6자리
double형의 경우 소수점 이하 16자리까지는 비교적 정확하게 표현된다..
기억해야할 점은 유효 숫자의 제한이 있기 때문에 정수형처럼 실수를 완벽하게 표현하지 못한다.
부동 소수점은 오차가 있을 수 있다 !!!!!
부동 소수점 상수
부동 소수점 상수는 기본적으로는 소수점을 이용하여 표현한다.
ex) 3.14처럼 표기하면 부동 소수점 상수가 된다.
부동 소수점 상수는 기본적으로 double형으로 저장된다 .
3.141592 // double형 상수 (64bit)
3.141592F // float형 상수(32bit) 4byte 크기의 float형 상수를 만드려면 상수 끝에 f or F
부동 소수점 상수는 지수 표기법으로도 표현이 가능하다 .
ex) 12345.6은 1.2345*10 ^4 ---> 1.23456e4로 표기 (c언어)
// 아 어렵다 다시 복습필수 !