정수 자료형
char 자료형은 1byte = 8bit 이다.
-2^7 | 2^6 | 2^5 | 2^4 | 2^3 | 2^2 | 2^1 | 2^0 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
제일 왼쪽이 자연스럽게 2^7이지만 char에서는 제일 왼쪽이 독특하게 -2^7이다.
unsigned char 최솟값 최댓값 : 0 ~ 255
cahr 최솟값 최댓값 : -128 ~ 127
short(2) = 32767
int(4) = 2.1*10^9
long long(8) = 9.2*10^18
Integet Overflow
컴퓨터는 그냥 시킨대로 계산을 하기 때문.
-2^7 | 2^6 | 2^5 | 2^4 | 2^3 | 2^2 | 2^1 | 2^0 |
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
위 수는 127.
127에서 1을 더하면 어떻게 될까?
-2^7 | 2^6 | 2^5 | 2^4 | 2^3 | 2^2 | 2^1 | 2^0 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
-128이 된다.
컴퓨터는 명령받은 대로 이진수 계산을 했을 뿐, 결과는 올바르지 않았던 것.
각 자료형의 범위에 맞는 값을 가지게끔 연산을 시키면 된다.
실수 자료형
float(4) = 32칸
double(8) = 64칸
3 = 2^1+2^0 = 11(2)
3.75 = 2+1+0.5+0.25 = 11.11(2)
sign field = 해당 함수가 음수인지 양수인지 저장하는 필드
exponent field = 과학접 표기법에서의 지수를 저장하는 필드
fraction = 유효숫자 부분을 저장하는 필드
float
sign(1) | exponent(8) | fraction(23) |
double
sign(1) | exponent(11) | fraction(52) |
ex) -6.75 = -1.1011(2) * 2^2
float 자료형으로 예시
1 | 10000001 | 1011000..00 |
제일 왼쪽부터 채우는 것. `이다. 나중에 검색 ㄱㄱ.
1 실수의 저장/연산 과정에서 반드시 오차가 발생할 수 밖에 없다.
float: 유효숫자 6자리
double: 유효숫자 15자리
2 double 에 long long 범위의 정수를 함수로 담으면 안된다.
double 은 유효숫자 15자리 인데 long long 은 최대 19자리이다. 오차가 섞인 값이 저장될 수도 있다.
3 실수를 비교할 때는 등호를 사용하면 안된다.
오차때문에 비교하고 싶으면 아주 작은 오차값일 경우에만.
'Algorithm > 바킹독의 알고리즘 강의' 카테고리의 다른 글
배열에 0 채우기 좋은 방법 (0) | 2021.04.09 |
---|---|
배열의 정의와 성질 (0) | 2021.04.08 |
표준 입출력 (0) | 2021.04.07 |
STL과 함수 인자 (0) | 2021.04.07 |
대략 허용가능한 N의 크기 (0) | 2021.04.07 |
댓글