Publish:

태그: , ,

카테고리:


크기

용량의 최소단위 : bit
1bit는 0, 1 둘중에 하나의 값을 저장할 수 있는 공간이다.
|1byte|8bit| |1kbyte|1024byte| |1mbyte|1024kbyte| |1gbyte|1024mbyte| |1tbyte|1024gbyte|

크기 : byte단위
문자 표현시 한글, 한자는 2바이트를 차지한다.
문자는 값을 저장하고 값에 해당하는 문자를 ASCII 코드에서 찾아서 표현한다.

타입

signed : +, - 부호가 있다.
unsigned : 부호가 없다.(+만 있다.)
기본은 signed 이다.

  • 표현범위를 벗어나면 동작되는 방식
    • 최대값 이상 : 최소값으로 전환
    • 최소값 이하 : 최대값으로 전환

INT_MAX : int로 표현할 수 있는 최대값
INT64_MAX : __int64로 표현할 수 있는 최대값

타입 크기 종류 표현범위
bool 1 참/거짓 false(0) - true(1)
char 1 문자 -128 ~ 127
short 2 정수 -32768 ~ 32767
int 4 정수 -2147483648 ~ 2147483647
__int64 8 정수  
float 4 실수  
double 8 실수  

사칙연산 및 연산 우선순위

사칙연산자 : +, -, *, /, %(나머지 연산)
*, /, % 연산이 먼저된다.
나머지 연산은 A를 B로 나눈 나머지 값을 구해준다.
10 % 3 = 1

나머지 연산은 정수 대 정수 연산을 지원한다.
Number = 3.14f % 322.33f; -> 에러

나눗셈 연산을 할 때 결과값을 실수형태로 얻고 싶다면
나눗셈을 수행하는 2개의 값중 1개라도 실수여야 한다.
A / B 를 수행할 때 둘 다 정수라면 결과도 정수로 나오고 소수점이 짤린다.

%d : 정수값을 받아서 문자열로 변경.
%f : 실수값을 받아서 문자열로 변경.
%c : 문자 1개를 받아서 문자열로 변경.
%s : 문자열을 받아서 문자열로 변경.

%는 특수한 행동을 하는 문자이므로 문자열 내에서 %를 쓰고 싶다면 %% 이렇게 두 번 쓰면 나타난다.
printf("10 %% 3 = %d\n", Number);

1
2
3
4
5
//Number = 10 / 0;    -> 에러  
Number = 0 / 10;    // -> 에러 안남

int	Number11 = 10, Number12 = 0;
//Number = Number11 / Number12; //    -> 에러
  • 사칙 연산자가 관계연산자보다 우선순위가 높다.
    1
    2
    
    Result = 10 + 7 > 20 + 2;
    printf("10 + 7 > 20 + 2 = %d\n", Result); // -> 결과는 false
    

논리 연산자

논리연산자 : 참/거짓 대 참/거짓을 연산하여 결과로 참/거짓이 나오는 연산자이다.
AND(&&), OR(||), NOT(!)
AND : 둘다 참일 경우만 참이고 아니면 거짓이다.
OR : 둘중 하나라도 참이면 참이고 아니면 거짓이다.

A B AND OR
0 0 0 0
1 0 0 1
0 1 0 1
1 1 1 1

NOT : 반대로 나온다.

A NOT
0 1
1 0

진수

  • 2진수 : 0, 1 둘중 하나로 표현.
  • 10진수 : 0 ~ 9 사이의 숫자로 표현.
  • 16진수 : 0 ~ 15 사이의 숫자로 표현.
    10 ~ 15는 두자리를 차지하기 때문에 a ~ f 로 표현.

👍 213을 2진수, 16진수로 변환해보자.

2진수

1
2
3
4
5
6
7
213 / 2 = 106 -- 1
106 / 2 = 53 --- 0
53 / 2 = 26 ---- 1
26 / 2 = 13 ---- 0
13 / 2 = 6 ----- 1
6 / 2 = 3 ------ 0
3 / 2 = 1 ------ 1

더이상 2로 나눌 수 없다면 마지막 몫부터 거꾸로 읽는다.
213 = 11010101

1 1 0 1 0 1 0 1
128 64 32 16 8 4 2 1

128 + 64 + 16 + 4 + 1 = 213

2진수는 앞에 0b를 붙여서 표현한다.

16진수

16진수 1자리는 2진수 4자리를 차지한다. |1|1|0|1|/|0|1|0|1| |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| |8|4|2|1|/|8|4|2|1|

8 + 4 + 1 / 4 + 1
13 / 5
d / 5 (-> d : 10, 11, 12, 13 을 a, b, c, d 순으로 적용하면 d가 됨됨) 0xd5

16진수는 앞에 0x를 붙여서 표현한다.

1
2
3
4
5
6
7
8
9
10
// 다시 2진수로 풀어헤쳐보면,
5 / 2 = 2 -- 1
2 / 2 = 1 -- 0
// => 0101 (자리 갯수가 부족하면 앞에 0 붙인다)

13 / 2 = 6 - 1
6 / 2 = 3 -- 0
3 / 2 = 1 -- 1

// 11010101

비트 연산자

비트단위 논리연산자 : AND(&), OR(|), NOT(~), XOR(^)
A와 B를 연산하게 되면 먼저 A와 B를 2진수로 변환하고
각 자리별로 논리연산을 수행한다.

A B XOR
0 0 0
1 0 1
0 1 1
1 1 0
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
// &
213 : 11010101
479 : 111011111
479 & 213 = 213
 111011111
&011010101
 011010101

// |
479 | 213 = 479
 111011111
|011010101
 111011111

// ^
479 ^ 213 = 266
 111011111
^011010101
 100001010
 256 + 2 + 8 = 266

// ~
~213 = -214

~ 00000000 00000000 00000000 11010101
  11111111 11111111 11111111 00101010

비트 연산 예시

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
31
32
33
34
// 0x00000001와 0x1은 같다.
// 0x00000001 :     1 -> 2진수로 표현하면 1
// 0x00000002 :    10 -> 2진수로 표현하면 10
// 0x00000004 :   100
// 0x00000008 :  1000
// 0x00000010 : 10000
const int	Attack = 0x00000001;
const int	Defense = 0x00000002;
const int	HPBuf = 0x00000004;
const int	MPBuf = 0x00000008;
const int	Critical = 0x00000010;

int	Buf = 0;

// Buf = 0 | 1 = 1
Buf = Buf | Attack;

// Buf = 001 | 100 = 101
Buf = Buf | HPBuf;

// Buf = 00101 | 10000 = 10101
Buf = Buf | Critical;

// Buf = 10101 ^ 00100 = 10001
Buf = Buf ^ HPBuf;              // 버프 제거

// Buf = 10001 ^ 00100 = 10101
Buf = Buf ^ HPBuf;              // 버프 재생성

printf("Attack : %d\n", Buf & Attack);
printf("Defense : %d\n", Buf & Defense);
printf("HPBuf : %d\n", Buf & HPBuf);
printf("MPBuf : %d\n", Buf & MPBuf);
printf("Critical : %d\n", Buf & Critical);

쉬프트 연산자

쉬프트연산자 : «, » 2가지가 있다.

10 을 2진수로 변환하면 -> 1010

10 « 2 = 101000 = 40 -> 0을 뒤에 2개 붙임 10 « 3 = 1010000 = 80 -> 0을 뒤에 3개 붙임

-> 결과적으로 2의 n승만큼 곱해지는 것

80 » 2 = 10100 = 20 -> 뒤에 2비트 삭제 80 » 3 = 1010 = 10 -> 뒤에 3비트 삭제

-> 결과적으로 2의 n승만큼 나눠지는 것


이슈 및 공부한 것을 기록해두는 개인 블로그 입니다. 댓글, 피드백 환영합니다 🙂

Update:

댓글남기기