c언어 3

부동소수점 이해하기

부동 소수점의 오차 1/3을 소숫점으로 표현하면 0.333333...처럼 끝이 없는 수인 것을 알고 있다. 이것을 십진 무한 소숫점 수 라고 한다. 마찬가지로 이진법에서도 이진 무한 소숫점 수가 있다. 대표적으로 0.1이다. 0.1을 이진법으로 표현하면 0.10000000149011611938..로 끝이 없는 수가 나타난다. 컴퓨터는 유한한 저장공간을 가지고 있고, 그 중 실수는 32비트(float) 또는 64비트(double)에 저장 된다. 따라서 컴퓨터(2진법을 사용)는 십진법의 0.1을 정확하게 이진법으로 같은 값을 나타낼 수 없다. 0.1 * 0.1 조차도 이진법의 0.01 근사값이 아니다. 따라서 연산이 많아질 수록 오차는 더 커질 것이다. 0.1 * 0.1 (0.1 의 이진법의 제곱) = 0...

컴퓨터구조 2021.09.07

scanf 사용시 오류 (scan_f)

#define _CRT_SECURE_NO_WARNINGS (소스코드 첫 부분) #pragma warning(disable:4996) (소스코드 첫 부분) _CRT_SECURE_NO_WARNINGS (프로젝트 속성\c/c++\전처리기\전처리기 정의에 추가) 소스파일 만들 시 Security 체크 해제 sizeof 연산자를 세번째 인자에 넣는다. char str[50]; scanf_s("%s", str, sizeof(str)); scanf 가 버퍼 오버플로우에 취약한 문제때문에 scanf_s를 대신 사용하도록 한다. 오버플로우란 할당된 버퍼에 들어갈 수 있는 양보다 더 많은 양을 넣게 되면 프로그램이 멈추는데 이것을 해커들이 이용했기 떄문에 문제를 해결하기 위해 scanf_s가 등장했다. %d, %f와 같은..

[C언어]typedef와 구조체

typedef int main() { typedef int int32; } typedef 는 기존의자료형(int) 에다가 별명 (int32)을 붙여주는것이다. int와 int32랑은 같은의미를 말한다. - 예시 - typedef int pair[2]; pair point = { 3,4 }; pair은 2개짜리 인트형 배열을 의미한다. int point[2] = { 3,4 }와 같은 의미이다. typedef를 사용하여 문자열 담기 char* name = "hello"; char name[] = "hello"; typedef char* String; String name = "hello"; char형 포인터에 새로운 이름(String)을 만들어 준다. 즉, 자료형에 특별한 의미가 부여될떄 typedef를 쓴..