int와 unsigned의 연산시 산술변환

vani2의 이미지


int와 unsigned의 연산을 해보았는데요..

void main(void) {

int a = unsigned(23) + -235;
int b = 23 + -235;

cout << a << " " << b << endl;

}

다음코드를 실행해보니

4294967084 -212
계속하려면 아무 키나 누르십시오 . . .

다음과 같은 괴상한 값이 나왔는데

첫번째 값이 도저히 이해가 안되네요..

unsigned와 int사이에선 어떻게 산술변환 되나요?

winner의 이미지

C언어 펀더멘탈
http://kangcom.com/sub/view.asp?sku=200804300002&mcd=571

C 함정과 실수
http://kangcom.com/sub/view.asp?sku=200412140003&mcd=571

책들이 절판, 품절이라 구하기가 쉽지는 않을 것입니다.
그래서 추천하는 link 는 이곳에서 간간히 글을 쓰시는 신성국씨의 C FAQs
http://www.cinsk.org/cfaqs/index.ko.html

C++ 를 공부하고 계신 것 같지만 C언어에서 비롯된 것에 관심이 많으시네요.
제시하신 code 에 대해서 말씀드리자면 그렇게 만들지 마세요. ^_^

익명 사용자의 이미지

그냥 그렇게 만들지 말라고만 하고 끝내기엔 너무 복잡한 문제이니
이럴땐 검색어라도 하나 던져주심이 어떠하신지요...

winner의 이미지

plusb 님은 C++ 표준도 읽으시는 것 같은데 표준에서 찾아보시는 것도 좋을 것 같습니다. 다만 이런 저수준의 전통적인 문제는 분량이 좀더 작은 C 표준을 보는게 좋을 수도 있겠죠.
대부분의 문제는 다 해석된 것 같고 언급되지 않은 것을 말씀드리자면 unsigned 에서 int 로 변환될 때 표현되지 않는 값이므로 그것은 implementation defined 입니다.
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf 의 6.3.1.3 의 3번문장

남은 문제는 int 인 a 가 cout 에 의해 unsigned 로 해석되는 것인데 이것은 VC++ 2013 Express 의 bug 이거나 plusb 님의 실수겠죠.
출시되지 얼마 안 된 compiler 라서? ^_^

vani2의 이미지

좋은 자료를 찾긴했지만

깨지네요...

http://www.cinsk.org/cfaqs/html/node5.html

winner의 이미지

신성국씨한테 e-mail 을 써서 문자 encoding 넣어달라고 할까요? ^_^

vani2의 이미지

네 부탁드립니다

winner의 이미지

직접 해보심이.. ^_^

vani2의 이미지

encoding 변환이 안되네요..

notepad++를 사용했는데요..

소스자체에 문자셋을 추가해야하나요?

익명 사용자의 이미지

IE에서 문서 위에서 오른쪽 버튼 누르고 인코딩을 UTF-8로 하시거나...
다른 웹 브라우저에서도 인코딩을 UTF-8로 하시면 제대로 보입니다.

jick의 이미지

제가 해보니까 -212 잘 나오던데요, 환경이 어떻게 되시는지?

vani2의 이미지

첫번째가 잘되시나요?

저는 vc2013사용 합니다.

익명 사용자의 이미지

예시로 드신 소스 코드의 결과는 해석하기가 까다롭군요.

std::cout는 매개변수의 type에 맞게 출력이 이루어지는데,
a를 int라고 해석을 제대로 했다면
정수 변환이 어떻게 이루어지던간에,
-212가 나오면 나왔지
int의 최대 크기(아마도 2147483647일...)를 넘는 값을 출력할리가 없을 텐데...

원본을 가공하지 않고 그대로 올리신게 맞나요?

대신 제가 비슷한 결과가 나오는 다른 코드로 설명을 하겠습니다.

#include <iostream>
 
using namespace std;
 
int main(void)
{
	cout << unsigned(23) + -235 << endl;
 
	return 0;	
}

위의 코드 결과는, int의 크기가 4byte라면 4294967084 가 나올 겁니다.

이것은 C의 integer promotion과 usual arithmetic conversion 과 관련된 문제인데,
필요한 부분만 소개하자면,
unsigned와 int의 연산 결과는 두 integer형의 rank가 같기 때문에 무부호형인 unsigned 가 되고,
따라서 이 결과값은 UINT_MAX - 212가 됩니다.

익명 사용자의 이미지

UINT_MAX - 212가 아니고 (UINT_MAX + 1) - 212 입니다.
요새 정신이 없어서 오류가 많군요.

vani2의 이미지

네 확실히 코드 그대로를 올렸고 VS2013에서 실험했습니다...

저도 처음보는건데 매우 난감하군요..

게다가 G++에선 -212로 나옵니다.

익명 사용자의 이미지

부호형 무부호형 사이의 연산은 대체로 알기 어려운 버그를 양산할 가능성이 높은데
가장 문제 되는 것은 무부호형 size_t 관련 연산입니다.

size_t를 리턴하는 표준 라이브러리 함수들이 좀 되기 때문에,
이런 문제가 나오면 엄청나게 찾기 어려운 버그가 됩니다.

integer promotion과 usual arithmetic conversion에 대해 검색해 보시길 권합니다.

vani2의 이미지

음..

많은 분들이 unsigned를 되도록 쓰지않도록 권장하시는데

size_t때문에 안쓸수가 없네요...

뭔가 명확하고 명쾌한 설명문서가 있었으면 좋겠습니다 ㅜ..

klyx의 이미지

unsigned를 쓰지 말라는게 아니라 unsigned와 signed를 섞지 말라는거겠죠.
헷갈리시면 명시적으로 캐스팅해서 쓰세요. 일부러 표준 문서를 뒤져봐야 알수 있는 코드를 쓰지 마시고요.

익명 사용자의 이미지

문제가 되기 쉬운 상황은 부호형 무부호형이 섞인 상태에서
음수와 양수의 범위를 넘나들 때 입니다.

오히려 쉬프트 연산 등의 비트 연산을 사용할 때에는
무부호형에 대해서 동작이 매우 잘 되어 있기 때문에,
무부호형만 사용하는 쪽이 권장됩니다.

vani2의 이미지

음 integer promotion을 찾아보니 하나가 signed이고 하나가 unsigned일때 두 타입의 크기가 일치하면 unsigned로 변환되어 계산되고 만약 크기가 다르다면 signed로 변환되어 계산된다는데 -213을 short로 캐스팅하여 시도를 했더니 같은 값이 나옵니다.

어떻게 된 것인가요?

익명 사용자의 이미지

규칙 잘못 이해하셨습니다. usual arithmetic conversions 에 대해 찾아 보십시오.

http://msdn.microsoft.com/en-us/library/3t4w2bkb.aspx
http://c0x.coding-guidelines.com/6.3.1.8.html
http://docs.oracle.com/cd/E19205-01/819-5265/bjabw/index.html
http://pic.dhe.ibm.com/infocenter/zvm/v6r2/index.jsp?topic=%2Fcom.ibm.zos.r12.cbclx01%2Fcplr066.htm

구글에서 usual arithmetic conversions 라고 쳤을때 나오는 상위 4개의 링크 입니다.

같은 값이 나온다는게 그 이전처럼 4294967084 -212가 나온다는건지
-212 -212로 같은 값이 두번 나온다는건지 모르겠는데...
그 이전에 4294967084 -212가 나왔으면 지금도 그렇게 나오는게 맞습니다.
여전히 같은 규칙이 적용되거든요.

Otherwise, if the operand that has unsigned integer type has rank greater or
equal to the rank of the type of the other operand, then the operand with
signed integer type is converted to the type of the operand with unsigned
integer type.

무부호 정수형의 rank가 부호형보다 크거나 같은 상황이므로,
무부호형이 unsigned라면 부호형이 int이건 short이건 같은 방식으로 처리됩니다.

즉, 부호형이 unsigned형으로 바뀌어 처리되므로, 아까와 동일한 방식으로 처리됩니다.

vani2의 이미지

아. 그렇군요 드디어 이해했네요.. 감사합니다.

winner의 이미지

그런데 희한한 것은 제시된 문장에서 무부호정수형으로 변환한다며 compile 오류를 내네요.
-235 에 casting 을 하면 compile 이 되는군요. 제 MBA 의 Clang 은 제시된 것도 compile 되는데 말이죠.
하여간 -235 를 unsgined 로 casting 을 해서 만든 결과는 -212 -212 가 나옵니다.

여담으로 VS 2013 좋군요.
MS 는 작년에도 Apple 신제품 발표할 때 VS 2012 출시하더니만 올해도 그래서 스스로 묻힐까요...
써보면 정말 좋은데 말이죠.

vani2의 이미지

음 이것은 환경의 문제라고 할 수 있을까요?

다른분은 모두 -212가 나오는데 저만.. 이상한 값이나오네요.

익명 사용자의 이미지


환경에 따라 결과가 다르게 나오는게 문제가 아니라,

님이 보여주신 코드가 다른 사람에게서는 컴파일 오류가 나는데,

님은 잘 돌아간다는게 문제입니다.

코드 있는그대로 보여주세요

익명 사용자의 이미지

무부호 정수형으로의 변환은 잘 정의되어 있습니다.

C99 6.3.1.3 Signed and unsigned integers

Otherwise, if the new type is unsigned, the value is converted by repeatedly adding or
subtracting one more than the maximum value that can be represented in the new type
until the value is in the range of the new type.

즉, 새로운 타입의 표현 범위 안에 들어갈 때까지 새로운 타입의 최대값을 계속 더하거나 빼면 됩니다.

따라서, 경고를 주는 것이라면 모를까 컴파일러가 에러를 내면 안됩니다.

하지만, 새로운 타입이 signed이고, 현재의 값이 표현범위를 넘는다면,
그 행동은 implementation-defined 이고,
따라서 에러를 내던 말던 메뉴얼에만 잘 써놓았다면 뭐든지 할 수 있습니다.

gilgil의 이미지

2의 보수 체계를 사용하는 환경에서는 정수의 덧셈과 뺄셈의 signed/unsigned 처리 방식이 다른게 없고,
다만 값을 화면에 출력하는 과정에서 결과가 달라질 수 있지만
결국 a, b 두 변수 모두 다 signed이므로
-212 -212로 나올 것으로 예상은 되는데...

VS2012에서는

int a = (unsigned)(23) + -235;

요 라인에서
1>main.cpp(5): error C4308: negative integral constant converted to unsigned type

라는 컴파일 에러를 내뱉네요.

Win32/x64 그리고 Debug/Release 모두 확인해 봤습니다.
2013에서는 달라진 걸까요?

익명 사용자의 이미지

#include

이걸 소스코드 맨 위에 붙이고 다시 한번 테스트해 보세요.

익명 사용자의 이미지

태그로 인식되어 잘렸군요...

#include <iostream>

아무래도 cout의 선언이 빠져 있어서 그런게 아닌가 의심되는 상황이므로,
윗 선언을 넣고 다시 한번 시험해보세요.

익명 사용자의 이미지

아 그리고 namespace도 지정해서 한번 해 보세요.

#include <iostream>
 
using namespace std;
vani2의 이미지

#include <iosgream>
 
using namespace std;

이것이 integer promotion rules과 관련이 있나요?

jick의 이미지

그게 없으면 컴파일이 안돼야 정상인데 없는 코드를 올리고 "이렇게 나옵니다" 하니까 사람들이 미심쩍어 하는 거죠.

vani2의 이미지

에초에 컴파일이 안되면 예제의 결과를 낼 수 도 없는데요?

그것과는 전혀 관련없는 문제입니다.

메인코드 말고도 부수적인 것들은 예제에서 완벽하게 복사 붙여넣기를 하지않아도 모두 알아 보실 수 있을 것이라 판단하여 메인 코드만 올렸습니다.

아무도 이것에 대해 불평을 하거나 문제를 제기하지 않습니다.

객관적으로 봅시다.

qiiiiiiiip의 이미지

문제제기 1표요~

일단 위에 어떤분이 코드가 compile 오류를 낸다고 했고,
casting을 해서 결과를 얻었다고 했습니다.
casting을 하는 순간 전혀 다른 이야기가 되겠지요.

내가 보기에 irrelavant해서 올리지 않았는데,
실제 그부분이 문제인 경우가 부지기수입니다.

이 경우도 그런 경우라면 많은 사람들의 시간만 낭비한 셈이 되겠지요.

ymir의 이미지

애초에 올린 코드 자체는 문제가 없습니다. 문제가 있다면 생략된/언급하지않은 부분이죠.
정말로 문제가 없다면, int 인 a 가 어떻게 해서 unsigned 로 casting 되어서 cout 으로 출력되었는지 설명이 안 됩니다.
이제 사람들이 궁금해 하는건 그 어떤 차이가 그런 결과를 이끌어 냈는가? 입니다.
그러니 plusb 님이 생략한 부분, 컴파일러, 실행환경 등등이 궁금한 거죠.

$ cat a.cc
#include <iostream>
using namespace std;
 
int main(void)
{
        int a = unsigned(23) + -235;
        int b = 23 + -235;
 
        cout<<a<<" "<<unsigned(a)<<" "<<b<<endl;
 
        return 0;
}
$ g++ -g -W -Wall -std=c++0x -pedantic a.cc
$ ./a.out
-212 4294967084 -212

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

vani2의 이미지

그렇군요.

본문에선 아니지만 밑의 덧글에서 실헌환경을 언급하긴 했지만..

지금은 해결했네요.

저도 캐스팅해보니 -212 -212 정상적인 결과가 나왔습니다.

알고보니 이전결과를 가져오게 되더군요.

아무래도 많은 분에게 폐를 끼친것 같습니다.

예의있게 행동하려 해도 잘 안되는군요..
역시 조금 더 생각하고 글을 쓰는 습관을 들여야겠습니다.

qiiiiiiiip의 이미지

그럼 최초에는 어떻게 그런 결과가 나온 건가요??
그게 궁금합니다

역시 보여주신 코드와 실제 코드가 다른건가요?

qiiiiiiiip의 이미지

그럼 최초에는 어떻게 그런 결과가 나온 건가요??
그게 궁금합니다

역시 보여주신 코드와 실제 코드가 다른건가요?

vani2의 이미지

소스는 달라진게 없습니다.

단지 오류전의 결과를 가져왔을 뿐이죠

위 글은
그것 때문에 해명했을 뿐입니다.

winner의 이미지

이런 정보는 찾기도 어렵고, 도서는 절판이고, 오래된 질문들이라 대답할 수 있는 사람들도 귀찮을 때가 많고.. ^_^. 뭐, 그렇습니다.
C, C++ 의 인기가 예전만큼 아니라는 것도 하나의 이유겠으나 또한 이렇기 때문에 새로운 기술로 보다 많은 영역이 대체되길 바랍니다.

vani2의 이미지

감사합니다.

C/C++독학을 시작한지 약 6개월밖에 되지않은 뉴비 프로그래머라 이렇게 실력있고 지식있는 프로그래머들의 사이에 끼기엔 너무나 과분하다 생각하기에 자신을 낮추고 최대한 경력 프로그래머에게 예의있고 애매한 설명을 하지 않기위해 조심했는데도 불구하고 많은 지적을 받아 암울(?)하던 상태였는데 이렇게 위로해 주시니 감사할 따름입니다.

ㅜㅜ

ymir의 이미지

어쨌든 쓰레드에 참여했으니, 마무리를 지어 보자면..

그러니까 먼저 올렸던 소스는 문제가 있어서 제대로 컴파일이 안 되었는데..
이전에 컴파일 했던 실행 파일을 실행해서 나온 결과를 현재 소스의 결과로 착각하신 거라는 뜻인가요?

어찌되었든 마무리는 명확하게 해주시는게 오히려 예의차린 두리뭉실보다 낫습니다.
말투는 거칠더라도 차라리 논리적이고, 화면캡쳐나 link 밑줄 딱딱 그어가면서 citation 붙여 주는 사람이 환영받는 곳이거든요.
자신이 알고 있는게 틀리지 않았음을 확인한 사람은 안도할 것이고, 새로운 걸 알게 된 사람은 고마워 할겁니다.
누구든 실수 할 수 있기 때문에 비웃는 사람 없을거고, 그런 사람 있으면 그 정도 밖에 안 되는 사람이니 무시하면 됩니다.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

qiiiiiiiip의 이미지

그런것 같네요..
VS는 IDE상에서 F5 눌러서 빌드/디버그하려고하면,
컴파일 오류가 나면 이전 버전을 실행하겠느냐는 팝업이 떴던것 같네요.
이것도 참 이상한 점 중 하나였음.

--

그나저나 VS2013을 설치하려면 IE10을 요구하더군요. (express버전은 모르겠고, pro 버전..)
IE10을 설치 안하면 개발환경을 설치조차 못한다는..

VS 다음버전은 win8.1에 터치스크린모니터가 있어야지만
설치될거라는 우스갯소리도..

vani2의 이미지

조언 감사합니다.

오류가 발생했으니 이전에 컴파일 한 것을 실행시키겠냐는 팝업이 귀찮아서 다시는 보이지 않음을 설정해놓은 것이 화근이였네요..

제 착각으로 인해 많은 분들이 피해를 보지 않으셨으면 하네요..

마무리를 하자면

-212 -212가 정상적인 결과이며

최초 글 작성자인 제가 제시한 코드는 컴파일 되지않습니다.(캐스트하면 됩니다)

단지 이전의 결과를 가져왔을 뿐이므로 혼동 없으시길 바랍니다.

익명 사용자의 이미지

내가 위에서 말했죠?

> std::cout는 매개변수의 type에 맞게 출력이 이루어지는데,
> a를 int라고 해석을 제대로 했다면
> 정수 변환이 어떻게 이루어지던간에,
> -212가 나오면 나왔지
> int의 최대 크기(아마도 2147483647일...)를 넘는 값을 출력할리가 없을 텐데...

물론 g++에서는 iostream을 include 하지 않으면 아예 출력이 안되지만
vc++는 지금 내가 안 갖고 있으니, 혹시 모르니까 붙여보라고 한 겁니다.

내가 전에 코드 그대로 올린거 맞냐고 물었을때 뭐라고 답하셨어요?

> 네 확실히 코드 그대로를 올렸고 VS2013에서 실험했습니다...

근데 왜 말이 바뀌나요?

> 메인코드 말고도 부수적인 것들은 예제에서 완벽하게 복사 붙여넣기를 하지않아도
> 모두 알아 보실 수 있을 것이라 판단하여 메인 코드만 올렸습니다.
> 아무도 이것에 대해 불평을 하거나 문제를 제기하지 않습니다.

그대로 올렸다더니 왜 또 말이 바뀌지요?
그리고 그런거 아무도 불평하거나 문제를 제기하지 않았다고요?

별의 별 애매모호한 질문에도 내가 나 혼자 공부할때 힘들었던 생각해서
암말 안하고 좋게 좋게 답변해준게 한두번이 아닌데,
그게 참 그동안 많이 불편하셨고 신경질 나셨나 봐요.

이제 충분히 알만큼 알았으니 함부로 훈수두지 말라 뭐 이런 얘기인가요?

그러면 전 이제 님 글에 답글 안 달렵니다.
다른 인격이 되신 분들께서 계속 친절히 잘 가르쳐 주시겠지요.

vani2의 이미지

오해하시고 있는것 같아 해명합니다.

제가 처음에 질문을 하게된 이유는 코드의 integer promotion에서 표준과는 다른 이상한 값이 나와 질문을 하게 되었습니다.

중간에 이러쿵저러쿵 여러 의견을 들어왔고,

그 마지막에 님이 표준헤더를 추가해 보라고 하셔서 이 문제와 관련이 있는지 의문이 들어 다시 물어보았으나 여전히 별개의 문제를 다루고 있다고 생각하여 그렇게 쓴 것 입니다.

저는 말이 바뀐 것이 아니라 컴파일러 오류가 났음에도 불구하고 그것을 무시하고, 이전 컴파일 결과가 자동으로 나오는 설정으로 인해 컴파일 결과를 혼동하고서 아무 생각 없이 질문을 올렸기에 그 후에 부랴부랴 이 스레드의 무의미함을 확실하게 말한 것입니다.

요약하자면
저는 처음엔 실제 실험한 결과를 올렸었고 계속해서 해매다, 님이 표준헤더를 추가해 보라고 했을때 이 문제와 관련이 없다고 생각하였습니다. 그래서 지적을 하였지만, 이후 이 문제가 제 판단미스라고 판명된 후 제 실수로 인해 많은 분들이 피해를 입으셨을까 해명하는 도중 잘못된 오해를 산것 같습니다.

기분나쁘셨다면 죄송합니다. 그때 당시 너무 감정적으로 대응했던것 같습니다. (__)

실제로 이 문제는 의미가 없었다고 볼 수 있겠습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.