728x90
728x90
책 흐름 집중 포인트 : 예제 단위로 끊어본다. 핵심이 얕고 넓게 퍼져 있어서 사실만 축약한다.
질질질..글 스타일이라 코드를 치면서 집중도를 높이고 음악 들으며 봐도 되는 책이다. 오히려 그래야 좀 진도가 나간다. 옆에 비고?란에 의외로 중요한게 가끔 나온다.

 

 

4-3 

% 연산자의 피연사는 모두 정수형이어야 한다.

 

4-4 증감연산자

증감 연산자의 피연산자는 상수나 일반 수식을 사용할 수 없다
++ -- 사이에 공백은 넣을 수 없다
증감연산자는 산술연산자, 관계연산자, 논리연산자보다 우선순위가 높다

#include <iostream>
using namespace std;

int main() {
	int x, y, p;

	x = 3;
	y = x++;
	cout << "x=" << x << " " << " y=" << y << endl;

	x = 10;
	y = ++x;
	cout << "x=" << x << " " << " y=" << y << endl;

	p = ++x + y++;
	cout << "x=" << x << " " << " y=" << y;
	cout << "   p=" <<  p << endl;

	return 0;
}

 

4-5 감소연산자
(비슷해서 생략)

 

4-6 관계연산자

두 개의 피연산자 크기를 비교하는 연산자
< > <= => == != 가 있다.

관계연산자 우선순위는 사칙연산자보다 낮다.
조건이 일치하면 참/true/0 외의 정수가 되고 불일치하면 거짓/false/0 이 된다.
각 기호 사이에 공백을 넣으면 오류가 발생한다.

#include <iostream>
using namespace std;

int main() {
	int x;

	cout << "0이나 1을 입력하세요 : ";
	cin >> x;

	if (x == 0) {
		cout << "10/3=" << 10 / 3 << endl;
	}
	else {
		cout << "10%3=" << 10 % 3 << endl;
	}

	return 0;
}

 

 

4-7 논리 연산자

두 개의 데이터만 비교 가능한 관계연산자의 한계를 극복한다
논리연산자는 두 개 이상의 조건을 조합하여 표현한다.
연산 결과는 true, false 값만 가진다.

NOT(!) 연산 - 전체 조건 부정. 곱셈연산자보다 우선순위가 높고, 증가연산자와 같다
AND(&&) - 모든 조건 만족. || 연산자보다 우선순위가 높다
OR(||) - 일부 조건 만족. 

#include <iostream>
using namespace std;

int main() {
	int x;

	cout << "하나의 정수를 입력하세요 : ";
	cin >> x;

	if (x >=5 && x<10) {
		cout << "5보다 크거나 같고 10미만" << endl;
	}
	else {
		cout << "다른 정수" << endl;
	}

	return 0;
}

 

4-8 비트 단위 논리 연산자

임베디드시스템, 암호, 하드웨어 디바이스 제어를 위해 사용된다.
각 비트에서 비트단위논리연산자는 해당 비트에만 적용되고 다른 비트에는 적용되지 않는다

~x
x&y
x|y

비트 단위 보수 (~) - 1의 보수 (0이면 1, 1이면 0으로 변경된 것이 연산결과)
비트 단위 (&) - x와 y의 비트 단위 곱 (AND), 모두 1이면 1, 그 외에는 0가 연산 결과 
비트 단위 (|) - x와 y의 비트 단위 합(OR), 연산결과 모두 0이면 0, 그 외 1
배타적 비트 단위 합 (^) - 비트 XOR. 다르면1, 모두 같으면 0

~1100=0011
a=1100
b=0110
a&b=0100
0&0=0
0&1=0
1&1=1
1&0=0
// & - 모두 1일때만 1이고 그 외 0
a=1100
b=0110
a|b=1110
0|0=0
0|1=1
1|1=1
1|0=1
// | - 모두 0일때만 0, 그 외에는 모두 1
a=1100
b=0110
a^b=1010
// 0^0=0
// 0^1=1
// 1^0=1
// 1^1=0
// 입력값이 같지 않으면 1을 출력

 

n개 비트들의 xor 결과는 일반적으로
1의 개수가 홀수 개면 1, 짝수 개면 0이다

#include <iostream>
using namespace std;

int main() 
{
	int a, b, c;

	a = 25;
	b = 17;

	c = a & b;
	cout << "25(00011001) & 17(00010001) ==> " << c << '\n';

	c = a | b;
	cout << "25(00011001) | 17(00010001) ==> " << c << '\n';

	c = a ^ b;
	cout << "25(00011001) ^ 17(00010001) ==> " << c << '\n';

	c = ~a;
	cout << "~00011001 => 11100110 ==> -(0011001+1) 25에 대한 1의 보수";
	cout << c << endl;

	return 0;
}
// 각각 2진수로 변환한 후 각 비트끼리 연산한다

 

 

4-9 shift 연산자

D/A 변환기(디지털/아날로그 전환 회로) 와 같은 외부 장치로부터 입력한 내용을 디코딩(인코딩 반대로, 컴퓨터 언어를 사람용으로 변환)하거나 상태 정보 등을 읽어올 때 주로 사용. 

x<<n // x의 값을 2진수로 표시 후 n비트만큼 왼쪽으로 이동하고 이동 위치에 0을 채움
x>>n // // 우측으로 //

원래 있던 것은 절단

#include <iostream>
using namespace std;

int main() 
{
	int x, y;
	x = 9; //1001

	y = x << 1; // 10010 (18)
	cout << "1비트 왼쪽으로 이동하고 우측 남는 빈칸은 0으로 채움" << y << endl;

	y = x << 2; // 100100 (36)
	cout << "2비트 왼쪽으로 이동하고 우측 남는 빈칸은 0으로 채움" << y << endl;

	return 0;
}

 

 

주소 연산자 &
포인터 *

변수 x가 위치한 메모리 시작 주소
포인터 변수 x가 가리키는 곳의 데이터

&x // &주소 변수 
*x // *포인터

 

4-10 조건 연산자

if~then~else 명령문을 간단하게 하여 ?: 이렇게 쓴다
3개의 피연산자를 갖는 삼항 연산자

조건식?식2:식3;
//true면 2, flase 면 3

 

키보드에서 두 개의 정수값을 입력하고 최대값을 구하는 예

#include <iostream>
using namespace std;

int main() 
{
	int x, y, max;

	cout << "두 개의 정수값을 입력하고 Enter 키 ㄱㄱ";
	cin >> x >> y;

	max = (x > y) ? x : y;
	cout << "최대값: " << max << endl;

	return 0;
}

 

4-11 sizeof 연산자

프로그램에서 사용하는 데이터타입이 현재 사용중인 컴에서 얼마만큼의 메모리를 확보하고 사용되는지 조회

sizeof(data type);
#include <iostream>
using namespace std;

int main() 
{
	 
	cout << sizeof(int) << endl;
	cout << sizeof(char) << endl;
	cout << sizeof(double) << endl;

	return 0;

}

 

 

4-12 형 변환 연산자(캐스트연산자)

묵시적 타입 변환 (자동 타입 변환, implicit)
형 변화는 모두 암시적

명시적 타입 변환 
특별한 경우가 아니면 사용하지 않는다

캐스트 연산 후에는 원래의 정수 데이터형을 가진다.

 

#include <iostream>
using namespace std;

int x = 100;

int main() 
{
	int x = 10;
	int y = 3;
	double div;

	cout << x/y << endl; //정수/정수는 정수
	
	
	div = (double)x / y; //캐스트연산자 
	cout << div << endl;

	return 0;

}

 

4-13 단항 스코프 식별 연산자(::) 
::전역변수명

 

전역변수에 접근하기

#include <iostream>
using namespace std;

int x = 100;

int main() 
{
	int x = 10;
	int y = 3; //지역변수로 스코프 안에서 유효하다

	cout << x << endl;
	cout << y << endl;
	cout << ::x << endl; // 전역

	x = y + ::x;
	cout << x << endl;

	return 0;

}

 

함수/클래스/네임스페이스 내에서 정의하지 않고 외부에 선언된 이름은 선언 위치부터 파일의 끝까지가 유효 범위
숨겨진 전역변수 이름은 범위지정연산자(::)를 사용해서 참조한다.

 

 

 

연습문제

1. 데이터 2, 3, 5를 정수 변수에 저장하고, 곱셈한 결과를 변수 result에 저장한 후 화면에 출력

#include <iostream>
using namespace std;


int main() 
{
	int x = 2;
	int y = 3;
	int z = 5;

	int result = x * y * z;
	cout << result;
	
	return 0;
}

 

2. 키보드에서 두 개의 정수를 입력한 후 두 수의 합, 뺄셈, 곱, 몫, 나머지를 구

#include <iostream>
using namespace std;


int main() 
{
	int x, y;

	cout << "두 정수 입력 ";
	cin >> x >> y;
	
	cout << x + y <<endl;
	cout << x - y << endl;
	cout << x * y << endl;
	cout << x / y << endl;
	cout << x % y << endl;

	return 0;
}

 

3. 키보드에서 세 정수 입력 후 가장 큰 수, 가장 작은 수 출력

#include <iostream>
using namespace std;


int main() 
{
	int x, y, z;
	int min, max;

	cout << "3 정수 입력 ";
	cin >> x >> y >> z;	

	// 최소값
	min = x;	
	if (min > y) {
		min = y;
	}
	if (min > z) {
		min = z;
	} 

	// 최대값 
	max = x;
	if (max < y) {
		max = y;
	}
	if (max < z) {
		max = z;
	}
	
	cout << min <<endl;
	cout << max << endl;
	
	return 0;

}

 

4. 가로 4, 세로 7m인 직사각형의 면적(가*세)을 구하는 코드 

#include <iostream>
using namespace std;


int main() 
{
	int width = 4;
	int height = 7;
	int area = width * height;
	
	cout << area << endl;
	
	return 0;

}

 

5. 키보드에서 원금, 이율, 일 수를 입력 후 변수에 저장하고,
다음 공식으로 이자를 산출해서 결과를 출력하는 코드

#include <iostream>
using namespace std;


int main() 
{
	int principal;
	int annualInterest;
	int days;
	int rate;

	cin >> principal >> annualInterest >> days;

	rate = principal * annualInterest * days / 365;
	cout << rate << endl;
	
	return 0;

}

 

 

6. 사각형의 가로와 세로의 개수를 입력 후 별로 된 사각형을 출력하는 코드를 작성해보자. 
꽉 채운 사각형, 테두리 한 줄 외 속이 빈 사각형 모양으로 출력

#include <iostream>
using namespace std;


int main() 
{
	int x, y;	 
	
	cout << "사각형의 가로 세로 개수 입력 : ";
	cin >> x >> y;

	// 1. 꽉찬
	// 세로
	for (int j=0; j< y; j++) {
		// 가로
		for (int i=0; i< x; i++) {
			cout << "*";
		}			
		cout << '\n';
	}

	cout << '\n';
	 
	// 2. 빈
	for (int j = 0; j < y; j++) {
		// 가로
		for (int i = 0; i < x; i++) {			
			if (i == 0 || i == x - 1 || j == 0 || j == y-1) {
				// 첫번째나 마지막 가로 전부 찍기
				// 그 외 첫번째, 마지막 별만 찍기
				cout << "*";
			}
			else {				
				cout << " ";
			}		
		}		
		cout << '\n';
	}
	
	return 0;

}

 

7. 키보드에서 두 수를 입력 후 범위가 -5<x<10이면 참, 그 외의 수이면 거짓으로 출력

#include <iostream>
using namespace std;


int main() 
{
	int x, y;	 
	
	cout << "두 정수 입력 (음~양수) : ";
	cin >> x >> y;
	
	((x > -5 && x < 10) && (y > -5 && y < 10)) ? cout << "참" : cout << "거짓";

	return 0;

}

 

8. 키보드에서 두 수 입력 후 범위가 -10<=x<=95면 참, 그 외의 수면 거짓으로 출력

#include <iostream>
using namespace std;


int main() 
{
	int x, y;	 
	
	cout << "두 정수 입력 (음~양수) : ";
	cin >> x >> y;
	
	((x >= -10 && x <= 95) && (y >= -10 && y <= 95)) ? cout << "참" : cout << "거짓";

	return 0;

}

 

9. x>0이거나 y가 100보다 크거나 같으면 정상 출력

#include <iostream>
using namespace std;


int main() 
{
	int x, y;	 
	
	cout << "두 정수 입력 (음~양수) : ";
	cin >> x >> y;
	
	if(x > 0 || y >= 100) cout << "정상";

	return 0;

}

 

10. 비트단위 연산자를 사용해 65를 2, 8, 16진수로 출력 **

#include <iostream>
using namespace std;

int n = 65;

int ten_to_two(int n);
int ten_to_eight(int n);
int ten_to_sixteen(int n);

int main() 
{
	// 10진수를 2,8,16진수로 변환
	ten_to_two(n);
	ten_to_eight(n);
	ten_to_sixteen(n);

	return 0;
}

int ten_to_two(int n) {	
	// 재귀함수
	cout << "2진수 변환 결과 :";

	if (n < 2) { // 0이나 1로 이진법으로 변환할 필요가 없다
		cout << n;		
	}
	else {
		ten_to_two(n/2);
		cout << n%2;
	}
	cout << '\n';
}

int ten_to_eight(int n) {
	cout << "8진수 변환 결과 :";
	// 비트연산???? 이따 할거
	
}

int ten_to_sixteen(int n) {
	cout << "16진수 변환 결과 :";	
}

https://shacoding.com/2020/01/10/c%EC%96%B8%EC%96%B4-10%EC%A7%84%EC%88%98%EB%A5%BC-2%EC%A7%84%EC%88%98%EB%A1%9C-%EB%B3%80%ED%99%98%ED%95%98%EC%9E%90-%EC%84%B8-%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95-%EC%A0%9C%EA%B3%B5/ 

 

11. 13과 9를 2진수로 표현 후 비트 단위의 곱과 합의 결과 출력 **

 

 

12. 컴퓨터에서는 RGB로 색상을 표현하고, 16비트의 경우 각각 5비트씩 할당한다.
색상값을 16진수로 입력하고, 초록색에 해당하는 부분만 AND 연산해 마스킹 후 해당 부분의 값만 추출해 출력한다.

 

 

13. 비트 이동 연산자를 사용해 16을 곱하고 4로 나누어보자

 

 

14. 0~127까지의 문자 코드 중에서 촐력이 가능한 문자 출력

 

 

15. 다음과 같은 식을 계산해보자 (x값 입력은 cin 사용, 결과는 화면에 출력)

 

 

16. 키보드에서 화씨 온도 입력 후 섭씨 온도로 변환해보자

 

 

17. 키보드에서 두 정수 입력 후 합, 차이, 곱, 나누기 구해

 

 

18. 다섯자리 정수 입력 후 각 숫자를 하나씩 구분해서 출력
흰트 > 정수 나눗셈과 나머지 연산 사용(24781-> 2 4 7 8 1)

 

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,

v