실수형 자료형, 디버깅 단축키, 연산자

Yama·2023년 11월 29일
0

어소트락 수업

목록 보기
2/55

정수 타입 자료형이랑 실수 타입 자료형의 값들의 특징은 그냥 물어보면 딱 나오게 암기하기.

실수 자료형 - 소수 점 까지 표현

  • float(4)
  • double(8)
  • 특정 비트값을 하나의 실수 숫자에 대응하기에는, 실수의 개수는 무한대이다.
    • 그래서 부동소수점 표현 방식으로 실수는 표현한다.

부동 소수점 표현 방식

  • 정밀도를 고려해야한다.
  • 실수는 정확한 값이 아니다.

부동소수점 표현 방식 계산법.

실수형 자료형 주의사항

	volatile float f = 10.f / 7.f;
	float fSum = f * 7.f; 
  • 이경우 컴파일러가 알아서 10으로 맞쳐줬지만.
  • 정밀도 문제때문에 실수형으로 나눴다가 다시 똑같은 그값을 곱하면 처음값이 그대로 안나올 수 있다.

실수 타입의 변수의 값을 조건으로 활용할 떄는 주의 해야 한다.

float보다 double이 더 정밀도가 높다.

  • flaot타입은 소수점이 길어질수록 double비해 정밀도가 떨어진다.

참고 : 디버깅중 메모리 값 확인 하는법.

  1. 메모리 보고싶은 값에 중단점 걸고
  2. 디버그 클릭
  3. 디버그에서 창 클릭
  4. 메모리 클릭해서
  5. &변수값

인텔 cpu와 amd cpu차이

실수타입 변수 f안에 들어있는 값을 정수로 해석한 경우의 값을 확인하는법.

int* pInt = (int*)&f;

int i = *pInt;

  • 값이 이상해진다.

float타입 데이터를 int타입으로 암시적 형변환이 이루어짐(경고 발생)

i = f;

float타입 데이터를 int 타입으로 명시적 형변환이 이루어짐

i = (int)f;
  • 명시적으로 선언하고 하면 경고가 안뜬다
    • 이유: 프로그래머의 의도를 컴파일러에게 알려준거기 떄문이다.

실수 타입과 정수 타입 변수가 섞여서 문제가 발생하는 경우

	int a = 0, b = 0, c = 0;

	a = 1000;
	b = 1;

	c = a / b;
	c = b / a;
	

	float div = b / a; 
	float div = (float)b / (float)a;



float div = b / a;
  • b와 a는 정수이기때문에 먼저 나눗셈을 할떄 정수 기준으로 나누어서 소수점을 버린다 그 소수점을 버린 상태로 float에 들어가니까 0이 나온다.
float div = (float)b / (float)a;
  • 정수값이였던 b와 a를 먼저 실수형으로 형변환해주고 계산을해서 소수점을 가진 값이 나온다.

정수형과 실수 타입이 섞여 있다면 명확하게 한쪽타입으로 몰아서 해주는게 편하다.

  • 정수값만 필요하면 int로 소수점까지 필요하다면 실수형으로 명시적으로 바꿔서 계산해준다.

디버깅 단축키.

  • F9 : 커서에 해당하는 구문에 중단점 생성

  • F5 : 디버깅 시작, 중담점이 있으면 해당 중단점 구문을 실행하지 전에 중단
    : 디버깅중에 중단점에 멈추었을때 다시 F5 를 누르면 다음 중단점까지 한번에 실행

  • F10 : 중단점에서 멈추었을때 F10 을 누르면 한단계 실행

  • Shift + F5 : 디버그 모드 중지

  • '//' 주석 : 코드로 인식되지 않기 때문에 설명을 주로 작성

  • / (주석으로 취급) / - '/**/' 사이에 있는 구문은 전부 주석으로 취급

연산자

대입연산자

  • '=' 왼쪽에 있는걸 오른쪽 변수값에 대입해준다.

증감 연산자

  • 종류: ++, --
  • 전위(전치)
    • ++i, --i
  • 후위(후치)
    • i++, i--
  • 전위와 후위에 따른 연산자 우선순위가 변경
    • 전위는 우선순위가 가장 빠르다.
    • 후위는 우선순위가 가장 느리다.
  • 단순히 증감 연산자 하나만 사용하는 경우 전위건 후위건 별 상관 x

증감 연산자 예시

		int a = 0;
		int b = 10;
		int c = 12;

		// c 앞에 ++ 가 전위냐 후위냐에 따라 a의 최종 연산 결과 값이 달라짐.
		a = b + c; // 22
		a = b + ++c; // 23
		a = b + c++; // 22 

함수 범위

int mian(void)
{
	int a = 0;
    int b = 0;
	{
		b = 0;
    }
    
    return 0;

}
  • 범위(지역)안에서는 그 위에 선언된 함수들을 가져와서 사용가능.

사칙 연산자

  • 종류: +(덧셈), -(뺼셈), *(곱셈), /(나눗셈), %(나머지, 모듈러스)

정수끼리의 나눗셈

  • 소수점을 버리고 몫만 계산한다.
  • 따라서 나머지가 존재한다.

실수의 나눗셈

  • 실수의 나눗셈에서는 나머지 개념이 존재하지않는다.
  • 따라서 %(나머지 연산자)는 정수끼리의 연산에서만 사용가능하다.
		// float f1 = 0.f, f2 = 30.f, f3 = 4.f;
		float f1 = 0.f, f2 = 10.f, f3 = 3.f;
		f1 = f2 / f3;
		// f1 = f2 % f3; // 컴파일러 에러

bool 자료형

  • 참 , 거짓을 다루는 자료형
  • 1Byte
  • 정수타입이지만 0 이 아닌 모든 수를 1(참) 으로 바꾸어서 저장한다.
  • 0은 무조건 거짓으로 본다.
  • 0이 아니면 모두 참, 대표격인 숫자가 1일뿐.
    • bool b = 45;

강의 코드

int main(void)
{
	float f = 10.f / 7.f;
	float fSum = f * 7.f;

	if (fSum == 10.f)
	{

	}

	f = -118.625;

	int* pInt = (int*)&f;
	int i = *pInt;

	i = f;

	i = (int)f;

	int a = 0, b = 0, c = 0;

	a = 1000;
	b = 1;

	c = a / b;
	c = b / a;
	float div = (float)b / (float)a;	
	

	{
		int i = 0;
		++i;
		--i;

		i++;
		i--;

		i = 3 + 4 * 3;

		int a = 0;
		int b = 10;
		int c = 12;

		a = b + c++; 

		++c;

	}

	{
		int a = 30;
		int b = 4;
		int c = 0;

		c = a + b;
		c = a - b;
		c = a * b;
		c = a / b;

		c = a % b;

		
		float f1 = 0.f, f2 = 10.f, f3 = 3.f;
		f1 = f2 / f3;
		// f1 = f2 % f3; // 컴파일러 에러
	}

	{ 
		bool  b = 45;
	}

	return 0;
}

1차 23.11.29
2차 23.11.30
3차 23.12.01
4차 23.12.05
5차 23.12.11
6차 23.12.17
7차 23.12.24
8차 24.01.01
9차 24.01.22

0개의 댓글