일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- github action
- JDBC
- gotify
- 자료구조
- juice-shop
- JSP
- MySQL
- ubuntu
- CodeQL
- SUA
- 알고리즘
- LGTM
- virtualbox
- gosec
- 운영체제
- github
- DVWA
- 데이터통신
- firewall
- sqli
- OpenSource
- Juice Shop
- Codeup
- Database
- Python
- Network
- 백준알고리즘
- C언어
- OWASP
- goKart
- Today
- Total
비트(bit)주세요
변수와_연산자 본문
1) 변수
연산을 하기 위해, 아래와 같이 코드를 작성하여 원하고자 하는 결과를 얻을 수 있습니다.
하지만 코드가 좀 길어지고 연산을 반복할 때, 이러한 방식을 사용하다 보면 효율성이 떨어진다고 생각합니다.
그래서 특정 값을 저장하기 위해 변수라는 것을 사용합니다.
변수는 크게 정수형 변수와 실수형 변수로 나누어집니다.
정수형 변수는 이름 그대로 정수 값을 저장하는 변수입니다.
정수형 변수의 종류는 char형, short형, int형, long형 변수로 나누어집니다.
char형 : 한 문자만 저장하는 변수, [1byte]
short형 : 숫자를 저장하는 변수, (표현이 가능한 범위가 int형보다는 적음), [2byte]
int형 : 숫자를 저장하는 변수, [4byte]
long형 : 숫자를 저장하는 변수, [4byte]
실수형 변수도 이름 그대로 실수 값을 저장하는 변수입니다.
실수형 변수의 종류는 float형, double형 변수로 나누어집니다.
float형, double형 모두 실수를 저장하는 변수입니다
표현이 가능한 범위 : float형 [4byte] < double형 [8byte]
이 외에도 변수형은 정수를 대신하여 사용하는 별명 나열형 enum,
실제 자료는 없음을 명시적으로 선언하는 무치형 void가 있습니다.
지금까지 제가 설명드린 변수 자료형은 모두 기본형입니다.
나머지 형태는 나중에 알아보겠습니다.
이제 변수에 값을 할당할 수 있습니다.
값을 할당하기 전에 변수를 선언해야 합니다.
선언은 [변수의 자료형] [변수명] 순으로 선언이 되어야 합니다.
선언을 했으면 선언한 변수에 값을 넣어야 합니다.
값을 할당하는 방법은 아래의 2가지 방법으로 할당할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
|
#include<stdio.h>
int main()
{
int a=3;
int b;
b=3;
return 0;
}
|
cs |
선언하자마자 값을 할당해도 되고, 선언을 한 후 값을 할당해도 됩니다.
위의 코드는 정수값을 할당하는 코드였습니다. 코드에 출력문은 없지만
변수 a와 b를 모두 출력하면 차례대로 3 3이 출력됩니다.
정수형 변수를 출력할땐 printf("%d",[변수명])으로 출력하면 됩니다.
실수값을 할당할때는 아래와 같습니다.
1
2
3
4
5
6
7
8
9
10
|
#include<stdio.h>
int main()
{
float a=3.1;
float b=3;
return 0;
}
|
cs |
실수값을 할당하는거라 자료형이 float으로 바뀌었습니다. double로 바꾸어도 됩니다.
하지만 7번 라인을 보면 자료형은 실수형인데 할당값은 정수입니다.
범위는 실수형이 정수형보다 훨씬 크기 때문에 할당은 됩니다.
다만, 변수 b를 출력할때는 3.000000으로 출력됩니다.
자료형은 실수형이라서 출력할때도 실수형으로 출력되기 때문입니다.
a와 b를 출력할땐, 순서대로 3.100000 3.000000이 출력됩니다.
실수형 변수를 출력할땐 printf("%lf",[변수명])으로 출력하면 됩니다.
2) 연산자
변수에 값을 할당했을때, 이 변수들로 연산을 할 수 있습니다.
연산자의 종류는 아래와 같습니다
구분 | 연산자 |
대입 연산자 | = |
산술 연산자 | +, -, *, /, ++, -- |
관계 연산자 | <, >, <=, >=, ==, != |
논리 연산자 | &&, ||, ! |
복합 연산자 | +=, -=, *=, /=, %= |
삼항 연산자 | ? |
비트 연산자 | &, |, ~, ^, <<, >> |
연산을 할 때, 연산에 참여하는 변수가 1개면 단항 연산자, 여러개면 이항 연산자라고 합니다.
대입 연산자 : 오른쪽에 있는 값을 왼쪽 변수에 할당합니다.
산술 연산자 : 표에 나온 순서대로, 더하기, 빼기, 곱하기, 몫 연산, 나머지 연산
1을 더하기, 1을 빼기 입니다.
관계 연산자 : 왼쪽에 있는 값을 기준으로 하여 표에 나온 순서대로
내가 작다, 내가 크다, 내가 작거나 너와 같다, 내가 크거나 너와 같다
너와 내가 같다, 너와 나는 틀리다 입니다.
논리 연산자 : A && B - A와 B 모두 참이여야 참이다.
A || B - A와 B중에 하나만 참이면 참이다.
!A - A가 무조건 아니다. (A가 참이면 연산 결과는 거짓)
(A가 거짓이면 연산 결과는 참)
복합 연산자 : 편하게 사용하기 위하여 두가지 종류의 연산자를 사용한 연산자입니다.
ex) A = A + B --> A += B
삼항 연산자 : 3가지의 변수를 연산하기 위해 만들어진 연산자입니다.
ex) (A>B) ? C : D
A가 B보다 크면(참이면) C을 출력하고
작으면(거짓이면) D를 출력하라 라는 뜻입니다.
비트 연산자 : 논리 연산자에서는 전체 값을 보았다면
비트 연산자는 값을 비트로 쪼개어 연산합니다
3과 2를 연산할 때 3은 비트로 0011 이고
2는 비트로 0010 입니다.
2진수로 변환한 값을 기준으로 연산합니다.
그리고 연산한 값을 다시 10진수로 변환합니다
ex) 3 & 2
0 0 1 1
0 0 1 0
----------
0 0 1 0 ---> 2
이렇게 해서 연산 결과는 2가 됩니다.
<<, >>는 쉬프트 연산자라고도 합니다.
2진수로 변환하여 <<면 왼쪽으로 비트를 이동시키고, >>면 오른쪽으로 비트를 이동시킵니다.
A << B (A를 2진수로 변환하고 B자리만큼 왼쪽으로 이동시켜라)
ex) 3 << 2
0 0 1 1 --> 1 1 ㅁ ㅁ (비워진 ㅁ은 0으로 채웁니다)
연산결과는 12가 나옵니다.
마지막으로 연산자 우선순위가 있습니다. 연산자가 한 문장에 여러개가 있으면 먼저 처리할 연산자가 정해져있죠.
연산자 우선순위는 구글링을 하면 쉽게 정리가 되어있지만, 다 세세하게 외울 필요는 없습니다. 괄호를 잘 사용하고
식을 나누어서 사용하면 되기 때문이죠. 코드는 물론 길어지겠지만, 가독성은 훨씬 좋아집니다.
앞서 설명드린 변수와 연산자가 전부는 아니겠지만 이 정도만 알아도 프로그램을 짜는 데에는 문제가 없을 것입니다.
감사합니다.