20250903

Jaemyeong Lee·2025년 9월 3일
0

로드맵

목록 보기
3/3

계획

Rookiss

  • 정수의 원리

얌얌코딩

  • 변수, cout, debug 복습

혼자 공부하는 C언어

  • 다양한 파일 입출력 함수

정수란

  • 정수는 소수점이 없는 수로, 양수, 음수, 0을 포함
  • 컴퓨터는 정수를 2진수(Binary)로 변환하여 저장하고 처리
  • ex) 10진수 5 → 2진수 00000101 (8비트 기준)

정수의 표현 방식

  • 부호화 크기 방식
    • MSB(가장 왼쪽 비트)를 부호 비트로 사용
      • 0: 양수, 1: 음수
    • 나머지 비트는 크기 정보
    • +0과 -0이 중복 표현됨 → 비효율적, 실사용 거의 없음
  • 1의 보수
    • 모든 비트를 반전시켜 음수 표현
      • 예: 5 → 000001015 → 11111010
    • 여전히 +00이 존재함 → 사용 잘 안 함
  • 2의 보수
    • 현재 컴퓨터에서 표준으로 사용하는 음수 표현 방식
    • 방법:
      • 숫자의 이진수를 반전 (1의 보수)
      • 거기에 +1을 더함
    • 예:5 = 00000101반전 → 11111010+1 → 11111011 → 5
    • 장점:
      • +00이 하나로 통합
      • 덧셈/뺄셈 연산 회로를 하나로 통합 가능 → 효율성 ↑

데이터 타입과 저장 범위

  • signed: 부호 있음 → 음수 + 양수
  • unsigned: 양수만 → 더 넓은 양의 값 표현 가능
  • 타입 변환 시 손실 발생 가능 → 주의 필요
    • 예: int → short → 상위 비트 손실

      타입크기(Byte)Signed 범위Unsigned 범위
      char1-128 ~ 1270 ~ 255
      short2-32,768 ~ 32,7670 ~ 65,535
      int4-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295
      long long8-9경 ~ 9경 (±9,223,372조)0 ~ 18,446경

진법과 변환

  • 2진수 16진수는 4비트 단위로 나뉘어져 있어 매우 친화적
    • 2진수 4자리 = 16진수 1자리

      진법설명코드 표현
      2진수 (BIN)컴퓨터 내부 기본 표현0b1100
      10진수 (DEC)사람이 일상 사용하는 표현기본 숫자
      16진수 (HEX)디버깅/주소 표현에 유용0xF
      8진수 (OCT)예전 시스템에서 사용거의 사용 안 함

정수 연산

  • 덧셈
    ABA+BCarry
    0000
    1010
    1101 (올림 발생)
    • 예: 5 + 3
      • 500000101
      • 300000011
      • 결과: 00001000 → 8
  • 뺄셈
    • 뺄셈은 2의 보수 덧셈으로 처리
    • 예: 5 - 3 = 5 + (-3)
      • 3의 2의 보수: 11111101
      • 5 = 00000101
      • 결과 = 00000010 → 2
  • 오버플로우
    • 표현 가능한 최대값을 초과
      • 예: 2147483647 + 1 → 2147483648
  • 언더플로우
    • 표현 가능한 최소값보다 작음
      • 예: 2147483648 - 1 → 2147483647

메모리에 저장되는 방식

  • 리틀 엔디안
    • 하위 바이트(LSB)부터 메모리에 저장
    • 예: 0x12345678 → 메모리: 78 56 34 12
    • 인텔 아키텍처에서 기본
  • 빅 엔디안
    • 상위 바이트(MSB)부터 저장
    • 네트워크 통신 프로토콜에서 많이 사용

CODE

#include <iostream>
using namespace std;

// 정수의 원리
// 비트  0,1 데이터의 최소 단위
// 바이트
// 1 바이트 -> 8bit
// 컴퓨터는 전기 신호로 숫자를 만들어줌
// 최상위 비트는 -를 담당함
// 1바이트의 가장 큰 값을 01111111 : 127
// 11111111 = 1

// 복습
int hp;
// 데이터 범위
short mp;

// 진법
// 0,1,2,3,4,5,6,7,8,9 -> 10 (1과 0으로 표현) 조합하면서 무한대 숫자를 만들 수 있음\
// 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 16 진법
// why? 16 진법
// 2진법과 궁합이 잘맞음
// 

int main()
{
	hp = 0xFF/*306189112*/;

	mp = /*(short)*/hp;	// 값을 꺼내옴 // 다른 숫자가 나옴 범위 밖의 숫자가 날아감
					// 형변환이 필요함			
	cout << hp;

	return 0;
}

문제 1

  • 1주 동안 운동 횟수를 입력 받고
  • 칭찬 메시지 출력

입력 예시

5

출력 예시

멋지군요!! 칭찬합니다

풀이

#include <iostream>
using namespace std;

int main()
{

	int a;
	cin >> a;

	if (a)
	{
		cout << "멋지군요!! 칭찬합니다" << endl;
	}

	return 0;
}

문제 2

  • 숫자 하나를 입력 받음
  • 입력 받은 숫자를 그대로 출력
  • 뒤에 입력하셨군요 라는 글씨 출력

입력 예시

3

출력 예시

3 입력하셨군요

풀이

#include <iostream>
using namespace std;

int main()
{

	int a;
	cin >> a;

	cout << a << " 입력하셨군요" << endl;

	return 0;
}

문제 3

  • 숫자를 하나 입력 받음
  • 숫자를 세번 출력
  • cin과 cout만 이용

입력 예시

3

출력 예시

3 3 3

풀이

#include <iostream>
using namespace std;

int main()
{

	int a;
	cin >> a;

	cout << a << " " << a << " " << a << endl;

	return 0;
}

문제 4

  • 숫자 3개를 변수 a,b,c이 입력 받음
  • a 3번 출력, b 3번 출력, c 3번 출력

입력 예시

3 5 9

출력 예시

333
555
999

풀이

#include <iostream>
using namespace std;

int main()
{

	int a, b, c;
	cin >> a >> b >> c;

	cout << a << "" << a << "" << a << endl;
	cout << b << "" << b << "" << b << endl;
	cout << c << "" << c << "" << c << endl;

	return 0;
}

문제 5

  • 숫자 2개 입력 받음
  • 앞 숫자 - 뒷 숫자의 차를 구해서 출력

입력 예시

30 10

출력 예시

두 숫자의 차는 20 입니다.

풀이

#include <iostream>
using namespace std;

int main()
{

	int a, b;
	cin >> a >> b;

	cout << "두 숫자의 차는 " << a - b << " 입니다." << endl;

	return 0;
}

문제 6

  • 숫자 두개 입력 받고 덧셈, 곱셈, 나눗셈 출력

입력 예시

5 2

출력 예시

5 + 2 = 7
5 * 2 = 10
5 / 2 = 2

풀이

#include <iostream>
using namespace std;

int main()
{

	int a, b;
	cin >> a >> b;

	cout << a << "+" << b << "=" <<a + b << endl;
	cout << a << "*" << b << "=" <<a * b << endl;
	cout << a << "/" << b << "=" <<a / b << endl;

	return 0;
}

문제 7

  • 변수 a,b에 숫자를 입력 받음
  • 변수 a가 b보다 크면 a가 b보다 크다
  • 그렇지 않으면 b가 a보다 같거나 크다를 출력

입력 예시

4 3

출력 예시

a가 b보다 크다

풀이

#include <iostream>
using namespace std;

int main()
{

	int a, b;
	cin >> a >> b;

	if (a > b)
	{
		cout << "a가 b보다 크다" << endl;
	}
	else
	{
		cout << "b가 a보다 같거나 크다" << endl;

	}

	return 0;
}

문제 8

  • 숫자 2개를 입력
  • 둘 중 큰 수를 4번 출력

입력 예시

3 5

출력 예시

5555

풀이

#include <iostream>
using namespace std;

int main()
{

	int a, b;
	cin >> a >> b;

	if (a > b)
	{
		cout << a << a << a << a << endl;
	}
	else if(b > a)
	{
		cout << b << b << b << b << endl;

	}
	else
	{

	}

	return 0;
}

문제 9

  • 숫자 1개를 변수 a에 입력 받음
  • 5를 입력함
  • a++을 수행하면 6이 됨

입력 예시

5

출력 예시

5를 입력함
a++을 수행하면 6이 됩니다

풀이

#include <iostream>
using namespace std;

int main()
{

	int a;
	cin >> a;

	cout << a << " 를 입력함" << endl;
	a++;
	cout << "a++을 수행하면 " << a << "이 됩니다" << endl;

	return 0;
}

문제 10

  • 숫자 1개를 변수 input에 입력
  • 숫자가 3보다 크면 1을 더하고 출력
  • 그렇지 않으면 1을 빼고 출력

입력 예시

5

출력 예시

6

풀이

#include <iostream>
using namespace std;

int main()
{

	int input;
	cin >> input;

	if (input > 3)
	{
		input++;
		cout << input << endl;
	}
	else if (input <= 3)
	{
		input--;
		cout << input << endl;
	}

	return 0;
}

문제 11

  • 숫자 1개를 변수 num에 입력
  • 숫자가 양수라면
###
###
###
  • 숫자가 음수라면
$$$
$$$
$$$
  • 숫자가 0이면 출력하지 않음

입력 예시

3

출력 예시

###
###
###

풀이

#include <iostream>
using namespace std;

int main()
{

	int num;
	cin >> num;

	if (num > 0)
	{
		cout << "###" << endl;
		cout << "###" << endl;
		cout << "###" << endl;
	}
	else if (num < 0)
	{
		cout << "$$$" << endl;
		cout << "$$$" << endl;
		cout << "$$$" << endl;
	}
	else
	{

	}

	return 0;
}

문제 12

  • 숫자 3개 입력
  • 세 수의 합이 세 수의 곱보다 같거나 행운의 수 출력
  • 아니면 소소한 수

입력 예시

1 2 3

출력 예시

행운의 수

풀이

#include <iostream>
using namespace std;

int main()
{

	int a, b, c;
	cin >> a >> b >> c;

	if ((a + b + c) >= (a * b * c))
	{
		cout << "행운의 수" << endl;
	}
	else
	{
		cout << "소소한 수" << endl;
	}

	return 0;
}
profile
李家네_공부방

0개의 댓글