-
Notifications
You must be signed in to change notification settings - Fork 10
/
0189.txt
145 lines (145 loc) · 7.75 KB
/
0189.txt
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
한 2~3주 전에 그런 비디오 만들었어요.
RGB, '빨간색은 255,0,0이 아니다'라는 얘기를 했었거든요.
어차피 그러면서 한 이야기가 메모리에
들어간 숫자는 숫자일 뿐이고, 기타 등등등등.
한마디로 무슨 프로그램을 짤 때, 아니면 컴퓨터에서 볼 때,
여러 가지가 보이잖아요, 그래픽도 보이고,
이미지도 보이고, 소리도 들리고,
문자도 보이고,
이 모든 게 사실은
컴퓨터가 볼 때는 컴퓨터 메모리에 들어가면은
그냥 비트(bit)이기 때문에 010101,
각 비트마다 두 가지 초이스가 있는거고.
결과적으론 숫자하고 다를 게 없다라고 이야기를 했어요, 2진수 숫자.
그런데 이제 그 떄 하면서, 이제 문자 이야기를 했거든요.
최근에 했던 이야기 중에
하나이기 때문에 다른 사람한테,
문자 이야기를 좀 해볼게요.
그 컴퓨터에서 보면은 일단 한글은 좀 이제,
좀 제끼고 조금 더 복잡하기 때문에,
영어만 보면은 A,B,C,D 대문자 그리고
a,b,c,d 소문자 이런 게 있잖아요.
그러면 컴퓨터는 이게 a,b,c,d인지 어떻게 알지?
아까 말했을 때 그랬잖아요, 제가 그냥
메모리에서 모든게 다 숫자일 뿐이라고.
그러면 예를 들어서,
뭐 일단 답부터 드리면,
지금 언제나 그런 건 아닌데, 저희가 대부분 99%
그 대문자 A는 컴퓨터 숫자에서는 65에요.
65 맞을꺼야, 맞나? 틀리면 바보되는데, 맞아요.
그리고 소문자 a는 97이에요.
그리고 B는 66, C는 67, 대문자
A가 65니까 B는 그 다음, 그런 식으로 가요.
그리고 심지어는 0 1 2 3 4 5 6 7도
이제 문자로 있는 0 1 2 3 4 5 6 7이 있잖아요, 화면에 보이는 0.
그것도 숫자가 있어요.
재미있는게 뭐냐하면, 그러면 65를 컴퓨터는
A라고 어떻게 알고, 어떻게 A라고 화면에 보여줄까?
개념도 어쩌면 아까, 전에 말했던 색상 개념하고 똑같은 거에요.
숫자를, 컴퓨터를 잘 할려면 숫자를 알아야 되요.
모든 게 숫자라는 걸 이해하고 문자가 화면에 보이던,
그래픽이 화면에 보이던 모든 걸 다 숫자로 이해하면은,
프로그램 짜기가 너무 쉬워져요.
심지어 음악도 숫자고, 모든게 숫자에요.
어떻게 알까, 간단해요. 그냥 룰이 있는 거에요.
룰 하면서 뭐냐하면, 이 숫자가 65고
오면은 이 65란 숫자를 문자로 출력해죠, 그러면
나는 A로 출력하겠어라는 룰북이 어딘가에 있는 거에요.
66, 똑같아요.
66은 대문자 B야, 룰북이 어딘가 있는 거에요.
그러면 예를 들어서 이 룰북이 뭐냐?
들어보셨을 거 같은데, ASCII코드라고 하는게 그거에요.
물론 ASCII코드도 있고, 여러 가지 다양한 코드가 있어요.
한마디로 다양한 룰북이 있는거죠.
이 룰은 그냥 말하는 거에요, 이 숫자가 65면은 A고, 이거면 이거고, 이거는 이거고,
예를 들어서 10이면은 스페이스
이런 식으로 모든 규칙이 있는 거에요.
그러면 컴퓨터에서
이제 메모리에는 숫자가 들어가 있는데
'자, 이거를 화면에 문자로 출력해죠' 그러면 컴퓨터는
ASCII코드라는 걸 이용해서
봐서 이건 A를 출력해야 되겠어,
A를 출력해주는게 전부에요.
이게 더 재미있는게 뭐냐하면
Sorting 알고리즘에서 이걸 그대로 써먹어요.
왜냐 sort에서 보통 그런 거 있죠.
알파벳 순서로 sorting하기, a b c d e 순으로
어떻게 하냐
간단해요
그냥 A있죠, B 있죠, 65, 66 이죠. 빼버려요. 그럼 1 남죠.
이쪽 가면 1이고 반대로 가면 -1이고 그러면 그 숫자따라
어떤 게 먼저 와야 되는지 아는 거에요.
둘 다 0이면 같은 거니까, 마이너스 해서
0이면 sorting할 필요가 없고,
a, b인데 b에서 a를 뺏는데 1이 남는다,
그러면 이게 하나 높은 거니까 이걸 여기 둘지,
아니면 반대 순서로 하면 여기 둘지 결정하는거고.
아니면 이게 순서가 반대로 와서, b하고 a로 왔어,
그러면 a에서 b를 빼죠. -1이죠, 그러면 뒤집고.
간단한거에요, 그래서 일단 sorting뿐만이 아니라
굉장히 많은 거에 쓸 수가 있어요.
또 하나 재미있는 거는
아까 65가 대문자 A가 65라고 그랬죠.
소문차가 97이라고 그랬어요.
그럼 B는 66이고 대문자가,
소문자는 98이에요.
이 둘 간의 관계가 있어요.
그 관계가 뭐냐하면
이 차이가 언제나 -32라는 거에요.
차이가 32요, 97에서 65면 32에요.
맞죠? 맞아요.
32에요.
이걸 2진수로 그리면 더 재미있어요.
2진수는 모든 게 비트 단위라고 그랬잖아요.
그러면 첫 번째 비트는 1을 나타내요.
두 번째 비트는 2, 4, 8, 16, 32
한마디로 32란 숫자는 이 비트 하나가
꺼지고 켜지는 거의 전부 거든요.
그래서 인터뷰 문제도 많이
나오는 거지만 대문자를 소문자로 바꾸는 그런 코드,
소문자를 대문자로 바꾸는 코드
비트 마스킹 하나만 하면 돼요. 비트 하나만 꺼주면 무조건 대문자가 소문자, 소문자가 대문자 다 할 수 있어요.
뭐 꺼주거나, 넣어주거나.
그게 전부가 아니에요, 또 이제 C함수에 보면은 atoi라고 있어요. ASCII to INTEGER라고, 한마디로,
문자열로 10이라는 걸 썼을 때,
어떻게 숫자로 10으로 바꿀꺼냐,
이것도 굉장히 간단한 그냥 문자 빼기 그러니까,
어차피 코드에서
문자 a를 넣든
65를 써가지고 이거를 문자로 캐스팅하든 값은 같거든요.
결과는 같거든요, 그러면,
이 거를 그냥 뺄셈하는 것만으로도
어떤 값이 들어가 있는지 알 수가 있어요.
예를 들어서
1이라는 캐릭터가 들어왔다, 1
그 싱글 quote 안에 들어서 그러면 여기다가
싱글 quote '0' 을 빼버리면 차이가 1이 되거든요.
그러면 그건 이미 1이라는 걸 아는 거에요. 0이 들어오면 0이 되는 거고, 9 마이너스 0은 9니까 9고.
그래서 그런 식으로 그냥,
이 차이만 아는 것만으로도 굉장히 많은 일을 할 수 있어요, 그래서
모든 게 인터뷰 주니어, 인터뷰 문제 중에 전부에요.
대학 졸업 했으면 이 정도는 알아야 되요.
그리고 심지어는 시니어가
이걸 모르면 무조건 전 채용 안해요.
저는 최소한, 다른 사람은 채용할지 모르겠지만
그래서 이 숫자를 안다는 거, 컴퓨터에서
그건 굉장히 중요하구요, 무슨 컴퓨터가
보통 그런 이야기해요.
이제 제가 컴퓨터 처음 가르키는 사람들한테
자, 이런 단순한 걸 만들어봐, 아 그럼 이런 거 말고 무슨, 화면에 무슨, 그래픽이 나오는 거 만들고 싶다고.
그래, 그런 건 나중에 해도 돼.
왜냐하면 아무리 화면에 뭐 띄우고, 뭐 하고, 해봐야, 물론 처음엔 재미로 하고 다시 기본으로 돌아오는 건 좋아요.
해봐야 나중에 가면은 결국 이, 수학이 아니죠.
숫자 개념이 없을 때, 컴퓨터가 숫자로 돈다는
개념이 없기 때문에, 모든 걸 망치는 경우가,
모든 걸 망치는 게 아니라
더 발전을 못하는 경우가 굉장히 많아요.
그래서 컴퓨터에 들어가는 모든 건
숫자라는 걸 확실히 알아야 돼요.
그리고 그 중에 하나가 ASCII코드에요.
왜냐하면 가장 간단한 거 중에 하나거든요.
간단하잖아요, 65는 A, 이런 거.
그에 비해 색상 표현할려해도 복잡하지, 음악 표현할려면 더 복잡하지.
그 정도
예, 오늘은 그 정도로 대충 이야기하고,
예, 포프였습니다.