계획
Rookiss
얌얌코딩
혼자 공부하는 C언어
정수란
- 정수는 소수점이 없는 수로, 양수, 음수, 0을 포함
- 컴퓨터는 정수를 2진수(Binary)로 변환하여 저장하고 처리
- ex) 10진수 5 → 2진수 00000101 (8비트 기준)
정수의 표현 방식

- 부호화 크기 방식
- MSB(가장 왼쪽 비트)를 부호 비트로 사용
- 나머지 비트는 크기 정보
- +0과 -0이 중복 표현됨 → 비효율적, 실사용 거의 없음
- 1의 보수
- 모든 비트를 반전시켜 음수 표현
- 예:
5
→ 00000101
, 5
→ 11111010
- 여전히
+0
, 0
이 존재함 → 사용 잘 안 함
- 2의 보수
- 현재 컴퓨터에서 표준으로 사용하는 음수 표현 방식
- 방법:
- 숫자의 이진수를 반전 (1의 보수)
- 거기에
+1
을 더함
- 예:
5
= 00000101
반전 → 11111010
+1 → 11111011
→ 5
- 장점:
+0
, 0
이 하나로 통합
- 덧셈/뺄셈 연산 회로를 하나로 통합 가능 → 효율성 ↑
데이터 타입과 저장 범위
signed
: 부호 있음 → 음수 + 양수
unsigned
: 양수만 → 더 넓은 양의 값 표현 가능
- 타입 변환 시 손실 발생 가능 → 주의 필요
진법과 변환
- 2진수 16진수는 4비트 단위로 나뉘어져 있어 매우 친화적
-
2진수 4자리 = 16진수 1자리
진법 | 설명 | 코드 표현 |
---|
2진수 (BIN) | 컴퓨터 내부 기본 표현 | 0b1100 |
10진수 (DEC) | 사람이 일상 사용하는 표현 | 기본 숫자 |
16진수 (HEX) | 디버깅/주소 표현에 유용 | 0xF |
8진수 (OCT) | 예전 시스템에서 사용 | 거의 사용 안 함 |
정수 연산
- 덧셈
A | B | A+B | Carry |
---|
0 | 0 | 0 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 (올림 발생) |
- 예:
5 + 3
5
: 00000101
3
: 00000011
- 결과:
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;
int hp;
short mp;
int main()
{
hp = 0xFF;
mp = 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
입력 예시
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에 입력
- 숫자가 양수라면
###
###
###
$$$
$$$
$$$
입력 예시
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;
}