Key Derivation Functions (PBKDF2)

Posted by ironmask84
2015. 6. 24. 13:34 컴퓨터공학/Security


2년 전 부터 정보 보안에 대한 관심이 많아 지면서,

최근에 또 회사 업무로 인해 아래 암호화 알고리즘에 대해 알아보았다.

PBKDF2 라는 해쉬 컨테이너 알고리즘 이다. (Password-Based Key Derivation Function)

PBKDF2의 기본 파라미터는 다음과 같은 5개 파라미터다.

DIGEST = PBKDF2(PRF, Password, Salt, c, DLen)
  • PRF: 난수(예: HMAC)
  • Password: 패스워드
  • Salt: 암호학 솔트 (32bit 이상 추천.. 어떤 기준??)
  • c: 원하는 iteration 반복 수 (1000번 이상 추천 어떤 기준??)
  • DLen: 원하는 다이제스트 길이

PBKDF2는 NIST(National Institute of Standards and Technology, 미국표준기술연구소)에 의해서 승인된 알고리즘이고, 미국 정부 시스템에서도 사용자 패스워드의 암호화된 다이제스트를 생성할 때 사용한다.

위에서 PRF라는 것이 약간 헷갈리는데, 해쉬 함수를 의미하는 것으로 보인다.

기존 많은 웹서비스들은  패스워드 저장 시, SHA-1 이나 MD5와 같은 hash 알고리즘을 이용해 DB에 저장하여, 개인 정보를 보호하였으나, 이 방법도 HW의 눈부신 발전에 의해 무차별 공격 (brute-force-attack) 에 취약해지므로, 이를 대체 하기 위한 대표적인 알고리즘이다.

오픈소스이며, 최근에 여러 웹서비스나 프로그램에서 인기있는 알고리즘으로 보임.

내가 생각한 기본적인 사용법의 이해는 아래와 같다.

디바이스 내에는 DIGEST와 Salt 가 저장될 것이며,
Password는 저장되어서는 안된다.

유저가 Password를 입력할 때마다,
저장된 salt를 이용해서 PBKDF2를 통해, Digest가 출력될 것이고,
그 놈이 저장되어 있는 Digeest와 일치하는지의 여부를 볼 것이다.

마지막으로 참고할 만한 사이트 2개를 소개합니다.

1. 위키 : http://en.wikipedia.org/wiki/PBKDF2

2. NHN개발자 사이트 : http://helloworld.naver.com/helloworld/318732

 

SublimeText2

Posted by ironmask84
2015. 6. 19. 14:54 나는 프로그래머다!/HTML5


Sublime Text2 라는 Tool은 FFOS 프로젝트를 위한 HTML5 스터디를 위해 알게되었습니다.

이클립스 자동완성 기능의 맞을 알게된 저는 이 툴이 매우 편리하게 다가왔죠 ㅎㅎ

그리고 개인이 무료로 사용할 수 있는 훌륭한 Tool 입니다.

각설하고, 아래 간단한 사용법과 팁을 알려드립니다.

1. Tool 다운 Site : http://www.sublimetext.com/

2. Package control (for Plug in) Site : https://packagecontrol.io/
==> Emmet 플러그인 추천  
** 공식 사이트
http://docs.emmet.io/
https://github.com/sergeche/emmet-sublime

ex) html 파일 인 경우!
html:5 + Tab키
body>div + Tab키 , ul>li*20{item $} + Tab키, table>tr*10>td*5 + Tab키,

a[href="http://ironmask84.net"]>{ironmask's life} + Tab키, .title + Tab키 (div태그의 class로 자동 생성)

3. Sublime 많은 팁 Site (유용한 Plug 포함) : https://opentutorials.org/course/671/3595

제가 추천 드리는 기본적인 단축키
1. html:5 입력후 Tab키 누르면 기본적 html5 양식 출력

2. Ctrl + / : 한줄 주석달기 (html, script, css등 다 됩니다)

3. Ctrl + Shift + / : 요소별로 선택한 요소 전체 주석

4. Alt + Shift + 2, 3, 4 : 화면 영역 분할하기  (Ctrl + 1, 2, 3, 4 로 영역 포커싱 가능)

5. Ctrl + D : 현재 선택한 단어와 동일한 단어를 연속으로 선택 가능


아래는 타 블로그의 유익한 내용을 담아봤습니다. ^^


html 코딩 중에 브라우저로 바로 열기를 추가해 보겠습니다. 해당 기능은 플러그인으로 설치하는게 아니라 직접 코드를 만들어서 플러그인을 제작한 뒤에 단축키를 지정해줘야 합니다. 에디트플러스 쓰시는 분들은 Ctrl + B로 브라우저보기 할 수 있죠. 드림위버에는 F12가 있구요.


일단 메뉴의 Tools -> New Plugin을 누릅니다. 이상한 샘플 명령어들이 있는 파일 하나가 열립니다. 그곳에 아래 내용으로 덮어 씌우기를 합니다. 그리고 저장해 준뒤 파일을 닫습니다.


import sublime, sublime_plugin

import webbrowser


class OpenBrowserCommand(sublime_plugin.TextCommand):

    def run(self,edit): 

        url = self.view.file_name()

        webbrowser.open_new(url)


그런 뒤에 단축키를 지정해보죠. 단축키 지정은 Preference -> Key Bindings – User입니다. 지난 포스트에서 폰트 옵션을 지정한 것처럼 제가 지정한 단축키를 따로 저장하는 파일입니다. 파일이 열리면 아래의 코드를 복사해서 붙여넣어줍니다.


{ "keys": ["ctrl+b"], "command": "open_browser" }


저장한 뒤 파일을 닫아준뒤 html 파일 작업중에 Ctrl + B를 누르면 기본 브라우저로 html 파일이 열립니다. 그럼 말이 나온 김에 단축키에 대해 알아보겠습니다. 가장 많이 사용하는 단축키는 아래와 같습니다.


  • Shift + Del(Backspace) : 현재 커서가 있는 줄 완전 삭제
  • Ctrl + Del(Backspace) : 단어 단위로 삭제하기
  • Ctrl + Shift + D : 현재 커서가 있는 줄 아래로 현재 줄 복사
  • Ctrl + Shift + [, ]  : 태그 닫기와 열기
  • F11 : 전체화면모드


 

HTML 과 JavaScript 기본 참고 사이트

Posted by ironmask84
2015. 6. 19. 14:46 나는 프로그래머다!/HTML5


기본 강의 사이트
--> https://opentutorials.org/module/904/6619

sublimeText 사이트
--> http://www.sublimetext.com/

sublimeText Package 사이트
--> https://packagecontrol.io/

웹프로그래밍 전문 블로그
--> http://webdir.tistory.com/319

'나는 프로그래머다! > HTML5' 카테고리의 다른 글

JavaScript - 이벤트 응용1 (버블링과 캡쳐링)  (0) 2015.07.28
JavaScript - 이벤트  (0) 2015.07.28
JavaScript에서의 객체와 객체지향  (0) 2015.07.22
JavaScript의 함수!!  (0) 2015.07.21
JavaScript 재귀함수 예시  (0) 2015.07.20
jQuery 와 Element 객체와 Node 객체  (0) 2015.07.16
Attribute와 Property  (0) 2015.07.14
DOM Tree  (0) 2015.07.13
JQuery 초 간단 이해  (0) 2015.07.10
SublimeText2  (0) 2015.06.19
 

올레 LTE 데이터 플러스

Posted by ironmask84
2015. 4. 27. 16:50 Excellent Tips


 http://haeho.com/485  참고..

 

C언어 정리하기 - 문자열과 문자열 함수

Posted by ironmask84
2015. 4. 8. 13:56 컴퓨터공학/C언어 레퍼런스


자료 출처 : http://ruvendix.blog.me/220263134254

컴퓨터와 문자에 대해서 얼마나 알고들 계시나요?


어떤 프로그래밍 언어든지 문자와 문자열을 다루는 것은 매우 중요해요!

문자를 출력하지않는 프로그램은 거의 없죠~

게임에서 문자가 하나도 나오지 않는다고 생각해보세요...


물론 레벨, 경험치, 돈은 출력이 되겠지만 캐릭터의 이름, 퀘스트의 내용, 공지 사항 등 중요한 것들이 나오지 않습니다...

특히 문자는 게임을 한글화할 때 중요하죠~ 게임을 한글화할 때는 단순히 문자를 출력하는게 아니라 기초 지식이 좀 필요합니다.

그 기초 지식을 아는 분과 모르는 분들을 위해서 포스팅을 가르겠습니다.

문자를 다루기 전에 꼭  알아야할 개념이 [문자 집합(Character Set)]입니다.

문자 집합은 말 그대로 문자들이 모인 것을 말하는데 경우에 따라서는 전 세계가 공유하는 문자 집합도 있습니다.

많이들 들어보셨겠지만 [유니코드(Unicode)]가 대표적이죠.


컴퓨터에서 문자를 표현할 때는 그냥 표현하는게 아니라 규칙이 있습니다.

그 규칙에는 SBCS, MBCS, WBCS 등이 있습니다. 하나씩 살펴볼게요.

<SBCS = Single Byte Character Set>

SBCS는 문자를 표현할 때 1바이트만 사용하는 방식을 말합니다.

컴퓨터는 미국에서 발명되었으므로 당연히 사용하던 문자도 영어였죠.

영어는 1바이트만 사용해서 문자를 표현할 수 있습니다.


정확히 말하자면 7비트를 문자 표현으로 사용하고 마지막 최상위 비트를 오류 검사용 비트인 패리티 비트로 사용해요.

SBCS는 미국의 ANSI에서 만든 ASCII가 대표적입니다.

 

ASCII는 정보 교환을 위해 ANSI에서 만든 코드를 말합니다.


ASCII 표를 보면 65부터 90까지가 영어 대문자 알파벳이고 97부터 122까지가 영어 소문자 알파벳입니다.

어떤 프로그래밍 언어를 배우던지 ASCII를 모르면 문자를 다룰때 좀 어려울거에요.

ASCII는 모든 프로그래밍 언어에서 사용이 가능합니다.


비트탕 2개의 데이터를 표현할 수 있으므로 ASCII는 최상위 비트를 제외하고 127개의 데이터를 표현할 수 있지만

최상위 비트까지 사용해서 총 256개의 데이터를 표현하는 확장형 ASCII도 있습니다.


<DBCS = Double Byte Character Set>

SBCS는 치명적인 문제가 있었는데 일부 다른 나라의 언어들을 표현할 수 없다는 점이였습니다.

즉, 1바이트만으로는 한글, 일본어, 중국어 등은 표현할 수 없습니다.

DBCS는 SBCS의 문제를 해결한 문자 집합으로 문자의 표현 크기를 2바이트로 늘렸습니다.

하지만 DBCS도 ASCII를 사용하기 때문에 코드가 중복되는 문제가 발생했습니다.

이 때문에 SBCS와 DBCS 둘 다 사용해야 했습니다...



<MBCS = Multi Byte Character Set>

MBCS는 SBCS와 DBCS를 잘 조합한 문자 집합입니다.


ASCII는 전 세계가 공통으로 사용하고 그 외의 코드들을 한글, 일본어, 중국어 등의 문자로 표현합니다.


자세히 말하자면 ASCII는 0x00부터 0x7F까지니까 여기까지는 전 세계가 공통으로 사용하고


0x80부터는 각 나라마다 따로 사용합니다. 따라서 0x80부터는 각 나라마다 코드가 겹칠 가능성이 높죠.


일본 게임에서 많이 등장하는(미소녀 연애 시뮬레이션, JRPG, 라이트 노벨 게임 등) S-JIS가 대표적입니다.

MBCS는 지금도 사용합니다. 이 때문에 좀 문제가 발생하기도 해요.

문자를 출력할 때 비주얼 스튜디오에서 설정을 좀 바꿔야하는 경우가 있습니다...


MBCS냐 WBCS냐에 따라 문자의 출력 방식이 달라집니다.

이 부분은 잘 알아두세요.

<WBCS = Wide Byte Character Set>

?WBCS는 MBCS를 보완한게 아니라 전 세계가 공통적으로 사용할 수 있도록 만든 문자 집합입니다.


WBCS보단 MBCS가 편한 경우도 많아서 그런지 대부분의 프로그램들이 WBCS를 잘 안쓰죠.


모든 프로그램들이 WBCS를 사용한다면 게임 한글화도 정말 쉬워집니다...

?WBCS는 주로 인터넷에서 사용됩니다. 전 세계가 공통적으로 사용해야할 필요가 있으니까요.


WBCS의 대표가 유니코드입니다. 유니 코드는 모든 문자를 전부 다 2바이트로 표현합니다.

그리고 전 세계 문자를 다 넣으려다보니 용량이 많이 큽니다... 그래서 MBCS를 많이 사용하긴 하죠.?


문자에 대해서 이해할 때는 가장 넓은 개념이 문자 집합이고 그 안에 EUC-KR, S-JIS, 유니코드 등이 있다고 이해해야 됩니다.

그럼 폰트는 뭔가요? 폰트는 문자를 표현하는 방법을 말합니다.

문자에 해당되는 코드는 그대로 유지하고 문자의 크기, 삐침, 굵기, 기울기 등만 변경하는걸 폰트라고 합니다.

한글화를 해봤는데요 문자 코드가 없던데요? 문자를 코드 말고 이미지로 사용하는 방법도 있습니다.

이런걸 고유 폰트라고 하는데 각 이미지를 코드와 연결해서 사용하는 방식입니다.

고유 폰트를 사용하는 게임들은 한글화가 무진장 어렵습니다...

 

문자 집합에 대해서는 이걸 잘 기억하세요.


MBCS에서는 영어가 1바이트이고 다른 대부분의 문자들이 2바이트입니다. (일본어에서 히라가나는 1바이트)


WBCS에서는 모든 문자가 2바이트입니다.


그렇다면 한글은? 한글은 대부분 2바이트로 표현됩니다.


문자열을 다루는 함수를 사용하기 위해서는 먼저 헤더 파일을 포함시켜주세요.

"string.h" 헤더 파일은 문자열을 다루는 함수들이 선언되어 있고


"ctype.h" 헤더 파일은 문자를 판단하는 함수들이 선언되어 있습니다.

제가 사용한 포인터와 배열입니다.


여기서 중요한건 포인터는 문자열의 주소를 가지고 있을뿐 조작하거나 그런건 못합니다.

문자열을 복사 및 결합 및 변환하려면 문자 배열을 사용해야 합니다.


"strlen()" 함수는 종료 문자(\0)를 제외한 문자열의 크기를 알려주는 함수입니다.

한글은 2바이트이고 공백 문자는 1바이트니까 출력은 제대로 나왔군요.

"strcpy()" 함수는 String Copy의 약자로 문자열을 복사하는 함수입니다.

포인터는 작동하지 않으므로 문자 배열을 사용하세요.

첫 번째 인자가 문자열을 저장할 인자고 두 번째 인자가 복사할 문자열입니다.

보안상의 문제로 "strcpy_s()" 함수를 사용했습니다.


"strncpy()" 함수는 "strcpy()" 함수와 비슷합니다.

마지막 인자는 바이트를 나타는데 몇 바이트만큼 복사할지를 설정합니다.



"strcpy()" 함수의 문제를 "strdup()" 함수로 해결할 수도 있습니다.

String Duplication의 약어로 문자열을 복사하는 함수입니다.


다만 문자열을 복사할 때 동적 메모리 할당을 이용해서 문자열의 크기만큼 복사합니다.

동적 메모리 할당을 이용하므로 포인터를 사용해서 주소를 받아야 합니다.?

"strcat()" 함수는 String Concatenation의 약어로 문자열을 붙이는 함수입니다.



"strchr()" 함수와 "strstr()" 함수는 문자열에서 문자와 문자열을 찾는 함수입니다.

약간 사전과 비슷하죠? 사전 프로그램을 만들 때 많이 사용하는 함수입니다.


"strcmp()" 함수는 조건문을 사용할 때 많이 사용하는 함수입니다.

문자열과 문자열을 비교해서 같은지 다른지를 판단합니다.

조건문에 사용하면 문자열을 입력받아 문자열을 검사하는 프로그램을 만들 수 있어요.

문자열1 > 문자열2면 양수를 반환하고

문자열1 == 문자열2면 0을 반환하고

문자열1 < 문자열2면 음수를 반환합니다.


"strupr()" 함수와 "strlwr()" 함수는 영어 알파벳을 대문자 및 소문자로 바꿔주는 함수입니다.

보안상의 이유로 "_strupr_s()" 함수와 "_strlwr_s()" 함수를 사용해야 하지만 이게 더 불안정합니다...

그래서 "_strupr()" 함수와 "_strlwr()" 함수를 사용했습니다.

컴파일하면 경고문이 출력되긴 하지만 무시해도 괜찮아요.

그냥 함수를 새로 만들 수도 있습니다.

ASCII에서 영어 대문자와 소문자의 코드를 이용하면 대소문자 바꾸는건 간단해요.

영어 대문자를 영어 소문자에 해당되는 코드로 바꿔치기하면 간단하죠~



입력한 문자가 무슨 문자인지 잘 판단해주네요~

이 함수들을 자세히 파헤치자면 문자가 맞으면 0이 아닌 값을 반환하고 문자가 틀리면 0을 반환하는 형식입니다.


C언어의 기초를 어느정도 알고나면 후반부는 이런식으로 함수들을 몇 개 소개합니다.


그리고 그 함수들을 싹~다 모은걸 라이브러리라고 하는데 라이브러리는 보통 책에서는 잘 나오지 않죠.


C언어에서 제공하는 함수를 C 라이브러리라고 하는데 정말 많습니다... 그렇다고 다 알 필요는 없고요.

필요할 때 찾아서 사용하면 되는거에요~ 대부분의 프로그래밍이 이런 방식입니다.


머리가 정말 좋다면 모든 함수를 다 외워서 사용하겠지만... 기초 함수들만 알고 있어도 수많은 응용이 가능하답니다.

 


 

C언어 강좌 문자열 배열과 null

Posted by ironmask84
2015. 4. 3. 16:53 컴퓨터공학/C언어 레퍼런스


출처 : http://blog.naver.com/kwy4122?Redirect=Log&logNo=220305490766

■ 배열까지 진도가 나갔네요. ㅎㅎ 혹시 이 글을 가장 먼저 보시는 분들은 배열의 개념에 관련된 내용은 앞쪽 글들 참고하시고요. 여기서는 문자열 배열(char)과 null에 대해서 알아보겠습니다. 


■ C언어 자료형 중에서 char 자료형을 이용하면 문자열 배열을 저장할 수 있고, 변경도 가능합니다. 변경이 가능하다는 건 변수 형태로 문자열 저장이 가능하다는 의미이기도 하겠죠? C언어에서는 문자열을 표현할 때 큰따옴표(")를 사용하는데요. 이번에도 역시 예제를 먼저 만들어보겠습니다.



■ char형 aaa라는 배열이 메모리에 할당되고, [Hello World!] 문자열이 순서대로 저장됩니다. 그리고 지난 글에서 알아봤던 sizeof() 함수를 이용해서 배열의 길이를 구해서 출력하고 있는데요. 배열의 길이가 '13'이군요. 위 예제에서 char aaa[]="Hellw World!"는 char aaa[13]..... 인데, 배열 길이 값 '13'을 생략하고 초기화 하면 컴파일러가 자동으로 길이 값을 채워준다는 것도 배열 개념 알아볼 때 정리했었습니다. 참고하시구요. 


■ 그런데 좀 이상하지 않나요? 큰따옴표 안에는 공백 포함해서 정확히 12개의 문자열이 저장되어 있습니다. 아직 안 세어보셨으면 세어보세요. 분명히 공백 포함해서 12개입니다. 그런데 배열의 길이가 13으로 표시되네요? 여기에서 null 문자(\0)가 등장하게 됩니다. C언어에서는 문자열을 저장할 때 맨 마지막에 무조건 null 문자가 저장되는데요. 이유는 다음과 같습니다. 


■ 메모리에 문자열이 저장될 때 이진수로 저장되기 때문에 문자열의 시작과 끝을 표시할 수 있는 방법이 없습니다. 하지만 문자열의 시작은 char aaa[0]; 자리인 건 알 수 있습니다. 문제는 끝을 알 수가 없다는 건데요. 그 끝을 표시해주는 게 null 문자(\0)입니다. 그래서 무조건 문자열의 끝에는 null 문자가 붙게 됩니다. 이 녀석의 아스키코드값과 char형의 값을 출력해보겠습니다.



■ 배열의 마지막 자리[13]에 있는 null의 값을 정수와 문자 형태로 출력했습니다. 숫자 값은 "0"인걸 알 수 있고요. 문자 형태의 값은 아무것도 없습니다. 여기서 주의해야 할게 하나 있는데요. 공백이 아니고, 아무것도 없는 겁니다. 참고로 공백의 아스키코드값은 "32"입니다. 마지막으로 null과 " " 공백의 아스키코드 값을 출력해볼게요.



■ char 형태의 '\0'과 공백 ' '의 값을 정수(%d) 형태로 출력하고 있는 내용입니다. 확실하게 구분이 되죠?^^

 

C언어 정리하기 - 자료형이 곧 핵심

Posted by ironmask84
2015. 4. 1. 21:57 컴퓨터공학/C언어 레퍼런스


아래 자료 출처 :  http://ruvendix.blog.me/220263134254 

오~ 드디어 자료형까지 왔네요. 그런데 여기서부터 변화를줄까 합니다.

제가 설명은 최대한 쉽게하고 있으나 너무 길어진다는 단점이 생겨서...

아예 확 줄여버릴까 해요.

너무 길면 보는 사람들도 지루해하고 제가봐도 좀 짜증나더라고요...

이제는 글보다는 그림으로~ 긴 설명은 죄다 요약글을 활용할게요.

?아무리 길어도 그림만 넘치면 지루하지는 않겠죠?

그래서 강의 자료의 도움을 받을게요.

원래 무료로 제공하는 강의 자료고 제가 뭐 돈 주고 판다던가 그런것도 아니고...

뭔가 그럴듯한 그림이라면 다 프리렉의 저작권이라고 보시면 됩니다.

강의 자료를 사용하는게 문제가 된다면 댓글로 알려주세요~

moon_and_james-3

와... 하고싶은 말만 했는데도 벌써 길어지네요? 이제 시작할게요.

[자료형(Data Type)]은 모든 프로그래밍 언어에서 사용해요.

왜 그럴까요? 자료형은 컴파일러가 정보를 메모리에 저장하거나 가져올때 유용하기 때문입니다.

집을 짓는데 주택인지 아파트인지 오피스텔인지 이렇게 구분하는거에요~

만약 구분을 하지 않는다면? 집이 어떤 형태의 집인지 알 수가 없겠네요...

자료형은 변수에만 해당되는게 아니라 함수에도 해당이 됩니다.

근데 뭐... 함수는 아직 설명할때가 아니므로 변수만 설명할게요.

 


그동안 포스팅을 진행하면서 몇 번 얘기했었지만 변수는 형식이 있어요.

변수를 만들때는 [자료형 | 변수의 이름 | 변수의 값] 이렇게 만든답니다.

이걸 비유하자면 "집의 종류, 집의 이름, 집에서 사는 사람" 이렇게 되겠네요.

"&"는 주소 연산자로 변수나 함수가 시작되는 위치를 알려줍니다.


자료형은 크게 고정 소수점 수 자료형과 부동 소수점 수 자료형이 있어요~1

moon_and_james-38

너무 어려운 말이죠?

컴퓨터는 2가지의 자료형만 아는데 [정수형 자료형]과 [실수형 자료형]으로 구분해요.

?이제 정수형 자료형부터 알아볼건데 이번 포스팅에서는 알면 좋은 정보가 있어요.?

 

자료형에 대한 설명을 봤던 분들이라면 잘 아시겠지만 자료형은 크기가 중요합니다.

주택과 아파트는 크기가 다르죠? 보통 아파트가 건물이 더 큽니다.

그리고 그 크기를 이용해서 최댓값과 최솟값을 알 수 있어요~ 아파트가 1층부터  몇 층까지 있는지 알 수 있듯이요.

C언어에서는 명령어 [sizeof()]를 사용하면 자료형의 크기를 알 수 있습니다.?

"()" 여기 안에 자료형이나 변수를 넣으면 크기를 바이트로 알려줘요.


그리고 그 바이트를 이용해서 최솟값과 최댓값을 알아낼 수 있습니다.

위의 이미저처럼 최솟값과 최댓값을 계산하는데 비트로 계산해요. 1바이트는 8비트입니다.

4바이트의 자료형의 최솟값과 최댓값을 구해보면 이렇게 되겠네요.?

-231 ~ +231 - 1?

즉, -2147483648 ~ 2147483647이 되겠네요~ 왜 저런 공식이 나왔을까요??

 


공식을 적용하면 바이트를 이용해서 최솟값과 최댓값을 구할 수 있겠죠?

정말 많이 사용하니까 잘 알아두세요~ 자료형의 크기를 알려면 [sizeof()]를 사용해야 합니다.

함수가 아니라 C언어의 명령어니까 헷갈리지 않도록해요~


그런데 최솟값과 최댓값의 범위를 넘어가면 어떻게 되는걸까요? 최상위 비트는 고정이므로 변하지는 않을테고...

최솟값의 범위보다 내려가는걸 [언더 플로우(Under Flow)]라 하고

최댓값의 범위보다 올라가는걸 [오버 플로우(Over Flow)]라 합니다.

자료형을 사용하면서 정말~ 많이 발생하는 오류니까 잘 알아두세요!


이제 자료형을 하나씩 알아볼건데 int형부터 알아볼거에요.


int형은 가장 많이 사용하는 자료형으로 종류도 다양합니다.

int형은 보통 [short, int, long, long long]으로 사용하고 여기에 [unsigned]를 조합한 형태로 많이 사용해요.

컴파일러가 알아서 판단하기는 하지만 원래는 short int, int, long int, long long int로 써야 맞습니다.

생략하기보다는 직접 다 써보는게 아마 더 도움이 될거에요~

최솟값과 최댓값을 알아내기 위해 몇 바이트인지 알아볼게요.


소스 코드가 슬슬 복잡해지네요... 천천히 읽어보세요...

?sizeof()를 잘 활용해야 합니다. 자료형을 넣어도 되고 변수를 넣어도되요~



?

?알록달록 하네요~ 각 크기를 알아본건데 short int나 short나 둘 다 2바이트죠? 같은 자료형입니다.

가장 큰 자료형은 long long int로 8바이트나 되네요.

그런데 int는 원래 4바이트가 아니였어요. 컴퓨터 시스템이 발전하면서 크기가 커진것이지요.

C언어는 약 40년동안 계속 업데이트되고 새로 생긴것도 많아요. scanf_s() 함수가 그런거지요.

그래서 이건 보고싶은 분들만 보세요~


 

int 자료형들의 바이트를 알았으니 최솟값과 최댓값을 알 수 있겠네요.

그런데 이걸 굳이 계산 안해도 C언어에서 매크로 상수로 제공해줍니다.

"limits.h"? 헤더 파일은 int 자료형의 최솟값과 최댓값을 매크로 상수로 제공해줘요.

각 매크로 상수의 이름들이 보이죠? int 자료형들과 비교해보세요~


"%u"는 unsinged 자료형의 값을 제대로 출력하기 위해서 사용하는 형식 문자입니다.


 "%lld"는 long long int를 출력할때 사용해요. 나중에 만들어진 자료형은 형식문자가 따로 있어요.


"%llu"는 unsigned long long int를 출력할때 사용합니다.

?4바이트와 8바이트의 엄청난 값 차이...

unsinged long long int의 최댓값은 1844경...

moon_and_james-13

?

?char 자료형은 문자를 표현하기 위해 만든 자료형입니다.


ASCII로 문자를 표현할때는 7비트만 사용하고 나머지 하나의 비트는 패리티 비트3로 사용해요.


그러니 굳이 int처럼 4바이트로 만들 이유가 없죠? char 자료형은 1바이트 입니다.


char는 1바이트니까 메모리에서 한 칸을 차지하고


int는 4바이트니까 메모리에서 4칸을 차지합니다.


실제로 숫자가 저렇게 들어가는건 아니므로 오해하면 안돼요~


컴퓨터는 문자도 다 숫자로 인식합니다. 이 얘기만 몇 번째야...


컴퓨터가 문자를 숫자로 인식하는 방법이 참 여러가지인데 ASCII가 그 중 하나입니다.


ASCII는 영어와 일부 특수 문자들을 1바이트로 만든건데 개수도 255개4인가 그래요.


ASCII 표를 보면 영어 대문자가 65부터 90까지고 영어 소문자가 97부터 122까지네요.


약간 헷갈릴 수 있는게 ASCII는 영어를 1바이트로 표현하지만 유니코드는 2바이트로 표현해요.


ASCII나 유니코드 같은걸 문자 집합(Character Set)이라 하는데 이건 나중에 설명할게요.

 

char에 그냥 숫자를 넣어도 되고 작은 따옴표('')를 사용해서 넣어도 됩니다.

단! char 자료형은 1바이트이므로 문자 하나만 인식할 수 있어요.

그리고 큰 따옴표("")는 사용할 수 없답니다.



? 

첫 번째 출력 결과는 10에서 1이 짤리고 0만 출력되었네요.


두 번째 출력 결과는 ASCII로 10이 "\n"이므로 다음 줄로 갔군요.


문자를 입력하면 ASCII로 바꿀 수 있고 ASCII를 입력하면 문자로 바꿀 수 있어요.


?float 자료형은 int 자료형보다 보다 더 정확한 값이 필요할때 사용해요.


int 자료형만큼 종류가 많지도 않고 굉장히 간단합니다.


[float, double, long double] 이렇게 3개만 있어요. unsigned는 없답니다.


?float 자료형은 소수점마다 출력 범위가 다른데 float은 소수점 이하 6번째 자리까지 제대로 출력합니다.

double이나 long double은 같은 자료형이에요. 소수점 이하 15번째 자리까지 제대로 출력합니다.


?0.12345678908765432이라는 소수점 17자리 수를 출력하면 float은 0.123456까지 제대로 나옵니다.


0.1234567까지 나오는데요? 제대로 나온게 아니라 숫자가 말린겁니다.


double이나 long double은 0.123456789087654까지 제대로 나옵니다.

?바이트를 알았으니 float 자료형의 최솟값과 최댓값을 알아보죠.



?float 자료형의 최솟값과 최댓값은 "float.h" 헤더 파일에 매크로 상수로 있습니다.

소스 코드를 보면 매크로 상수를 알 수 있을거에요.


?

?float 자료형의 최솟값과 최댓값은 뭔가 환상적이네요?


아니 8바이트인데 뭐가 이렇게 복잡하게 나오는걸까요?


고정 소수점 수와 부동 소수점 수의 차이입니다.?


숫자의 범위가 워낙 크기 때문에 "%lf"로는 출력이 어려워요.

그래서 지수 표현으로 출력하는 "%le"를 사용합니다.?

int 자료형과 char 자료형 그리고 float 자료형을 알아봤어요.


그런데 각 자료형은 서로 섞일 수도 있고 다른 자료형으로 바꿀 수도 있습니다.


자료형을 섞으면 보통 바이트가 큰 자료형으로 합쳐져요.


int 자료형과 float 자료형을 섞으면 float 자료형이 됩니다.


char 자료형과 int 자료형을 섞으면 int 자료형이 되고요.


이렇게 섞는거 말고 자료형을 바꿀 수도 있는데 2가지의 경우가 있어요.

하나는 컴파일러가 알아서 바꾸는 [자동 형변환(Auto Type Casting)]이 있고


사용자가 자료형을 바꾸는 [강제 형변환(Coercion Type Casting)]이 있습니다.

?자동 형변환은 이렇게 컴파일러가 자료형을 막 바꿉니다.


컴파일러는 기본적으로 실수를 double로 보는데 사용자가 float으로 선언하면 잘라버립니다.


그래서 float은 값이 제대로 나올때도 있고 아닐때도 있어요...



강제 형변환은 이렇게 사용자가 직접 자료형을 바꿉니다.


"()" 안에 바꾸고싶은 자료형을 입력하면 자료형이 변해요.

int 자료형과 double 자료형을섞는 소스 코드입니다.

double 자료형을 제대로 출력하려면 "%lf"를 써야해요.


?int 자료형과 double 자료형을 더하면 double이 되네요.


int 자료형끼리 연산하면 int 자료형이 되지만~

강제 형변환으로 double로 바꾸면 double 자료형으로 값이 바뀝니다.

C언어에서는 사용자가 직접 자료형을 만들기도 합니다.

정확히 말하자면 원래있던 자료형을 이용해서 이름을 바꾸는거지요.


??typedef는 Type Definition의 줄임말입니다.


typedef를 쓰고 기존 자료형을 쓰고 새로운 이름을 쓰는건데 이걸 왜 쓰는걸까요?


기존 자료형을 두는게 더 좋은거 아닌가요? 맞는 말이긴 하지만 아닌 경우도 있어요.


?unsigned long long int 같은 경우는 기존 자료형이지만 무지 깁니다.


그래서 typedef를 사용하면 이걸 확~ 줄일 수 있어요.


unsigned long long int를 ULLINT로 새롭게 만들면 줄어들겠죠?

?typedef를 사용하면 뭐가 뭔지 모르는 경우가 있는데 그러면 자료형에 마우스를 올려보세요.

빨간색으로 표시한 것처럼 어떻게 만들어진 자료형인지 알려준답니다.


?

unsigned long long int나 ULLINT나 둘 다 똑같은 자료형입니다.


둘 다 8바이트의 자료형이라는걸 확인할 수 있죠??

여기까지~ 자료형에 관한 포스팅이였습니다.


포스팅 방식을 좀 새롭게 바꾸니까 평소보다 짧아진 느낌이 들죠?


다음 포스팅에서는 C언어의 꽃이자 프로그래밍 언어의 꽃인 반복문을 설명할게요.

 

자격증 및 나의 활동으로 본 스펙

Posted by ironmask84
2014. 12. 2. 00:52 About ironmask/Profile


** 자격증

01. 2003    컴퓨터활용능력 2급
02. 2003    운전면허 보통1종
03. 2004    정보처리 기능사
04. 2006    워드프로세서 1급
05. 2006    컴퓨터활용능력 1급
06. 2006    정보처리 산업기사
07. 2008    MOS Word 2007 Expert
08. 2009    정보처리 기사
09. 2010    SCJP
10. 2012    Six Sigma Green Belt
11. 2013    SW 개발역량 중급 (JAVA) (회사 내)
12. 2013    TRIZ (Level 1)
13. 2014    ITQ 한글 A급 (봉사활동 중 공부)
14. 2014    Six Sigma Black Belt
15. 2014    정보보안 기사 (필기 합격 후 실기 공부 중...)
16. 2016    한국사능력검정시험 2급 (3점 차로 2급.... ㅜㅜ)

** 봉사활동

1. 2001    고등학교에서 봉사활동부로 활동 (동래종합사회복지관 90시간)
2. 2004    부산국제영화제 자막팀으로 자원봉사 (72시간)
3. 2008    방과 후 학교 대학생 멘토링 (90시간)
4. 2008    부산국제매직페스티벌 홍보팀으로 자원봉사 (64시간)
5. 2008    태안반도 해변 기름 제거 자원봉사 (8시간)
6. 2013    회사 내 봉사활동 2회(서울 장애인 재활협회에 등록된 1급장애자에게 IT기술 교육) (20시간)
7. 2014    회사 내 봉사동아리 Performance팀(Life's Good) 남산원 (남산에 있는 고아복지단체) 에서
              컴퓨터 활용능력 2급 교육 지도 2회 (중학생, 고등학생 대상) (4시간)



 

새로운 그래픽 카드!!

Posted by ironmask84
2014. 11. 30. 00:21 취미생활/IT 기기 및 자동차


그래픽 카드를 새로 바꾸고 싶어졌다.. ㅎㅎㅎ

현재는 라데온 3850인데, 2009년에 중고로 산 3세대 중상급 그래픽카드이다...
하지만 이제 구식이 되어 버렸고... 컴 산지도 5년이 되었지만, 아직은 쓸만하기에..
그래픽카드를 중고로 업글 함 더해서, 좀 더 사용하기로 마음 먹었다. ^^

올 겨울이 따뜻하게.. 약간은 설레이는 기분이.. 오랜만..ㅋ

추가 포스팅 (2015-06-24)
: 산지는 꽤 되었지만 이제서야 추가 포스팅 남깁니다 ㅋ.. ,
중고로 5만원에 샀으나,
팬 소음이 꽤 나는 문제가...
다행히 용산의 기가바이트 업체에 가서 만원 더 주고 깔끔하게 고침..
소음도 안나고 너무 좋네요 ^^

참고로 제 사양은 AMD 쿠마 7750 블랙 에디션 + DDR2 4GB 램 + SSD 256GB (SATA2로 구동 ㅠㅠ)
                      그에 맞는 허접한 메인보드(AHCI모드 지원 안됨, SATA3 지원이 안됨 ㅠㅠ)
사실 이걸 산 이유는.... witcher 2 라는 게임을 원활하게 하기 위한..... 
GTA4 정도까지는 해보고 싶은데 가능할지.. 추후에 후기를 올려 보겠습니다..


새로 사려는 것은 GIGABYTE 라데온 HD 6850 UDV Over D5 1G

출처 : http://prod.danawa.com/info/?pcode=1325065&cate1=861&cate2=876&cate3=971&cate4=0&keyword=GIGABYTE+%B6%F3%B5%A5%BF%C2+HD6850+D5+1GB+UDV+OC

라데온 HD 6850 UDV Over D5 1GB WINDFORCE 2X 



 

IT 기기 보물 제 4호 G패드2 8.3인치

Posted by ironmask84
2014. 11. 20. 19:29 취미생활/IT 기기 및 자동차


회사 성과급으로?? 얻게 된 안드로이드 태블릿..

비운의 성과급이지만... 

나름 유용하게 사용은 하고 있음.

1. 화면이 크면 재밌을만한 앱(피아노, 악기, 터치가 주류인 게임)

2. 독서 (e-book, 만화책)

3. 야외에서 영화 및 동영상 감상


현재는... 교회 전도처에서 사용되고 있음!! 매우 뿌듯 ^^

 

IT 기기 보물 제 3호 LG 노트북 그램 13인치

Posted by ironmask84
2014. 11. 20. 19:27 취미생활/IT 기기 및 자동차


2014년에 등급품으로 구입하게 된 새삥이 놋북

13인치 그램인데, 최근엔 15인치 그램까지 나오면서,

굉장한 인기를 끌고있는 노트북 씨리즈 입니다.

이름이 그램인 이유는 1kg이 안되는 무게가 자랑이기 때문이죵 ㅋㅋ

13ZD940 씨리즈 모델 중 하나로 램 8기가에 SSD라
2014년 제품으로는 나름 고스펙이었습니다!!


제가 2010년 전에 써봤던 노트북이 2가지가 있었는데,

첫번째가 14인치 삼성노트북이었는데, 무게가 대략 2.5kg 정도 였던 기억이..

가방에 넣어다닐때 어깨 빠지는줄 알았죠 ㅋㅋ

두번째는 12인치 삼보 에버라텍 노트북..

14인치 노트북이 너무 무거워서 중고로 팔아버리고, 다시 중고로 구입했던 노트북이었어요. 

이 때는, 12인치임에도 1.5kg 정도였습니다. 이 당시는 꽤 가벼운 축이라고 할 수 있어요 ㅎㅎ


위 처럼 예전 시절과 비교하면, 13인치에 1kg 안되는 굉장한 혁신입니다.

이 글을 2014년에 썼지만, 

현재 2017년엔 이미 15인치가 1kg이 안되는 혁신...

앞으로 얼마나 가벼워질지 ㅎㅎ 

모바일 시대라고 하지만, 아직 PC나 노트북 시장이 사라지기엔 무리인 듯 합니다.

그것은 홀로그램 UI 정도가 나와야 가능하지 않을까 하는 생각이 드네요. 

 

IT 기기 보물 제 2호 MSI 노트북

Posted by ironmask84
2014. 11. 20. 19:26 취미생활/IT 기기 및 자동차


제 세 번쨰 노트북이 되겠군요..

회사 취직 후, 월급도 받기 시작하니 슬슬 필요한 물품 소비가 시작되던 때에... 

2010년 부터 고향인 부산 왕래 시, 여행 시에 요긴하게 써왔던 MSI 놋북..

이제는 중고로 파는셈 치고, 지인에게 선물?! 로 넘겼습니다..

 

 

 

 

IT 기기 보물 제 1호 데스크탑!

Posted by ironmask84
2014. 11. 20. 19:24 취미생활/IT 기기 및 자동차


 


 2009년에 샀던 약간 슬림형 케이스인데 상태가 나쁘진 않습니다!! 


 옆모습..  


 뒷모습 이때 한번 털어줬었나.. 나름 깨끗하네요 


본체 내부 모습  기존에 쓰던 라데온 3850이 보이네요..


 선물로 받은 라데온 6850과의 크기 비교 쿨러도 2개로 늘어나 큽니다.. 


 본체에 겨우들어가는 크기.. 6850도 한물갔던 시기지만.. 메인보드 한계로 인해... 


2014년에는 도비사 256GB SSD도 탑재합니다...

하지만, 메인보드가 구식이라.. SATA2.0 까지만 지원이 되서 제대로 된 속도가 안나옴 ㅜㅜ

사실 메인보드는 2013년 쯤 사망해서.. 비슷한 스펙의 새 메인보드로 갈아끼웠어요.

이 때 당시에 비슷한 스펙의 메인보드가 판매했던게 신기하기도 하고 다행이었음...

그러곤 현재 2017년 까지도 잘 쓰고 있네요.. 10년 채우려나??... 그리곤 2020년을 맞이하여 새로 구입??

메인보드가 먼저 뻗을지.. SSD가 먼저 뻗을지는 모르겠지만... 그 때가 2020년 전이면.. 그 때가 되겠군요!!


그 날, SATA3.0과 AHCI 모드를 지원하는 새 메인보드로 갈아타서 뿌듯함을 느끼고 싶네요.

사실 그것은.. 업글 수준이 아니라, 교체 수준이 될 듯 합니다. 

그래도 절약겸 기존 HDD, SSD는 그대로 가져다 써야죠!

 

현재 내 PC 사양

Posted by ironmask84
2014. 11. 20. 18:35 취미생활/IT 기기 및 자동차


현재 나의 PC는 2009년에 샀던 PC이다..

CPU : DualCore AMD Athlon Black Edition 7750, 2700 MHz
메모리 : 2 GB DDR2-800 DDR2 SDRAM * 2개
그래픽카드 : ATI Radeon HD 3850 (RV670) (256MB)
HDD : 320GB(WD. 5400RPM), 1TB(Samsung, 7200RPM), 256GB(Toshiba, SSD)
PC케이스 : 
3Rsystem L-600 브이렉스

주 모니터 : Samsung SyncMaster 2043BW/2043BWX/MagicSyncMaster CX2043BW (Digital)
서브 모니터 : MX278M (LG 27인치 TV 겸용)

위 사양 중 그래픽카드. 서브모니터, 1TB HDD, 256GB SSD는 2009년 후에 산 것이다.
그래픽 카드는 게임 하려는데 내장 그래픽카드로는 벅차서 중고로 저렴하게 구입한듯 하고, (2009)
원룸 자취를 하면서, 화면 큰 TV를 원했고, 이왕 하는김에 PC 모니터로도 활용하기 좋은 걸로 구입 (2010)
1TB 하드는 영상 및 자료가 넘쳐나서.. (2011 혹은 2012)
SSD는 좀 더 PC 속도를 최적화 해보고자.. 하지만, 메인보드가 Sata2에 AHCI 모드인가를 지원안해서.. 효과가 적었다.. (2014)
라데온 6850 그래픽카드 구입, 이것은 게임 위쳐2를 해보려는게 목적이었으나... 결국하다 말았지만 ㅡㅡ; (2015)


메인 보드가 2013년에 한번 사망하여, 새로 교체 하였다.. 이때 동네 PC 수리업체를 불렀는데,
부품포함 15만원이나 줬던 짜증나는 기억이... ㅡㅡ;

5년이 지난 지금  CPU는 아직도 잘 돌아간다..  ^^

싹 바꾸기 전에 그래픽 카드를 함 더 업글 하려고 하는데..
라데온 6850 중고가 맘에 끌리고 있음.. 5~6만원이면 살 수 있다..^^
결국 구입!


간만에 PC사양으로 들뜬 날임..

그럼 이만..

 

2014년 하반기...

Posted by ironmask84
2014. 11. 3. 23:28 생각과 일상/오늘의 일상


이럴 수가...
블로그 관리 및 정리를 너무 안했당..

하지만, 그 만큼 2014년은 바쁘게 지나간 해인 것 같다...
신앙생활, 주택청약, 운전, 기타, 정보보안 등등...
내가 생각해도 조금 뿌듯하다.. ㅎㅎ

아래는 내가 2009년 12월 31일에 올렸던 블로그 내용..

5년 뒤가 벌써 지금 이다... ㅡㅡ;;
아래 항목 중 이룬 것은..?
음.. 취미는 기타와 독서, 입사 후 확고히 적응은 했지.. 출장도 3주 제대로 가공...
글공 재테크 올해 청약 수확이 크당 ^^
기술연마라면.. 운전을 할 줄알게 됐다는 것과 정보보안 자격증 필기 취득 ^^..