'C++'에 해당되는 글 3건

  1. 2011.03.11 아스키 코드 표
  2. 2010.03.19 __gc keyword 1
  3. 2009.03.11 연산자
C++2011. 3. 11. 14:32
#. 기본 아스키 코드 표

#. 확장 아스키 코드 표


출처 : 네이년 이미지
Posted by 쿵캉켕
C++2010. 3. 19. 11:35

#. .NET이 출시 되기 전에 VC++은 Unmanaged type의 코드로만 작성되었고, .NET 기반인 C#의 경우는 managed type의 코드로만 작성 됩니다. 하지만 Visual Studio.NET에서 VC++로 프로그래밍 할 경우 프로그래머가 선택에 따라 managed type과 unmanaged type으로 프로그래밍할 수 있습니다.

#. __gc는 VC++로 프로그램 작성 시 managed type의 코드를 작성할 때 사용하는 키워드 입니다. 기본적으로 managed type은 garbage collector에 의해 자동으로 메모리가 수거되는데 클래스 선언 앞부분에 __gc를 붙이면 managed type으로 클래스를 선언하게 됩니다.

Posted by 쿵캉켕
C++2009. 3. 11. 11:06

산술 연산자

C 언어의 산술 연산자에는 +, - *, /와 나머지를 구하는 %가 있다.
산술 연산자는 데이터형에 구애받지 않고 오퍼랜드를 사용하나 %만은 정수형 오퍼랜드만이 사용 가능한다.  주의할 점의 있다면 산술 연산의 '*'와 포인터의 "*"를 구분할 수 있어야 하며, 산술 연산의 '-'와 단항 연산의'-'를 구분할 수 있어야 한다.
단향 연산은 하나의 오퍼랜드를 갖고 이항 연산은 두 개의 오퍼랜드를 갖는다.
 

구분

연산자

기능

사용예(i =6일 때)

이항 연산자

+ - * / %

가, 감, 승, 제를 계산 나눗셈의 나머지를 계산 I + 3 => 9
I % 4 => 2

단항 연산자

- ++ --

부호를 바꾼다.
1을 증가, 감소 시킨다.
i++ => i : 7
i-- => i : 5


(1) 이항 연산자(Binary Operator)

2개의 자료를 대상으로 산술적인 처리를 수행하는 연산자이다.  %를 제외한 + - * / 연산자에 대해서는 누구나 알고 있는 기본 적인 4칙원산의 연산자이다.
% 연산자는 나머지를 계산한다.  예를 들어 x = 17 % 3;은 17을 3으로 나눈 나머지 2를 변수 x에 대입한다.  %는 정수에 대해서만 사용할 수 있고 실수(float, double형)에 대해서는 사용할 수 없다.

(2) 단항 연산자(Unary Operator)

1개의 자료만을 대상으로 산술적인 처리를 수행한다.
++ 연산자는 대상 변수의 값을 1 증가시키며, -- 연산자는 대상 변수의 값을 1 감소시킨다.  이때 이들 연산자를 변수의 오른쪽에 적느냐 왼쪽에 적느냐에 따라 기능이 달라진다.  다음에 예를 표시하였다.

i++ : i의 값을 먼저 사용한 후 1 증가시킨다.
++i : i의 값을 우선 1 증가시킨 후 사용한다.

이는 -- 연산자의 경우도 마찬가지이다.  다음에 예를 표시하였다.

#include <stdio.h>

void main()
     {
     int i, a=1;
   
     for (i=1; i<=3; i++)
          printf("a : %d\n", a++);
     printf("\a : %d\n\n", a);

     a = a*10;

     for (i=1; I<=3; i++)
          printf("a : %d\n", ++a);
     printf("\na : %d\n", a);
     }

초보자의 경우에는 종종 이 위치 관계를 등한시하다가 오류를 범하게 됨을 보게 된다.  요컨대 변수명이 먼저 오면 변수값이 먼저 사용되고 ++(또는 --)이 먼저 오면 ++(또는 --)이 먼저 사용된다를 잘 기억해 두자.
다음과 같은 경우에는 관례적으로 ++, -- 연산자를 사용하지 않는다.

함수나 수식중에서 동일 변수가 2번 이상 사용되는 경우에는 해당 변수에 대해서는 ++, -- 연산자를 사용하지 않는다.

이는 위와 같은 경우 ++, --를 사용하면 프로그램 판독이 어려워지기 때문이다.

(3) 오퍼랜드 -- 연산에 사용되는 수

a +-b       a * * b     (오퍼랜드    연산자    연산자    오퍼랜드)

연산자는 2번 이상 연속적으로 기술할 수는 없으나 위의 두식은 문장(수식)으로서는 가능하다.  왜냐하면 연산자 중에 하나는 단항 연산자 하나는 이항 연산자로 사용되었기 때문이다.  어떻게 사용되었는지 괄호를 사용해 보면

a +(-b)               a * (*b)

(-b)와 (*b)에 사용된 연산자(-, *)는 단항 연산자로 사용되었다.  (*b)의 *는 포인터로 사용되었다.  위의 두 문장은 일반적으로 괄호를 사용하여 우선 순위를 구분해 주는 것이 보는 이로 하여금 오해의 소지가 없을 것이다.          



비교, 논리 연산자

산술 연산자 다음으로 많이 사용되는 연산자가 비교, 논리 연산자이다.

(1) 비교 연산자

같은가 다른가와 대소관계를 비교하는 연산자이다(Relational Operator)
 

연산자

기능

사용예(i = 6일때)

==
!=
> >= < <=
같은가를 비교
다른가를 비교
대소 관계를 비교
i = 3 : 0(거짓)
i != 3 : 1(참)
i >= 3 : 1(참)


비교 연산자가 구하는 값은 항상 1 또는 0중 어느 하나이다.  즉 비교 연산식이 성립되면 1(참)을, 성립되지 않으면 0(거짓)을 구한다.  이는 다음 항에서 설명하는 논리 연산자(&&, ||, !)도 마찬가지이다.

#include <stdio.h>

void main()
     {
     printf("3 > 2 : %d\n", 3 > 2);
     printf("1 > 2 : %d\n", 1 > 2);
     }

비교 연산식은 거의 대부분 if, for, while, do~while 문의 조건으로 사용된다.

(2) 논리 연산자

논리 연산자는 &&, ||, !의 세가지 연산자가 있는데 각각 AND, OR, NOT의 기능을 수행한다.
&&, ||는 이항 연산자이고 !는 단항 연산자이다.  또한 관계 연산자와 마찬가지로 결과가 참이면 1 거짓이면 0의 결과값을 갖는다.  && 연산자는 ||연산자보다 우선 순위가 높다.
 

연산자

기능

사용예(i=6일때)

비고

&&
||
!

양쪽 모두 참일 때만 참
양쪽중 어느 하나라도 참이면 참
거짓이면 참
i>0 && i<5 : 0
i>0 || i<5  : 1
i(i>0)         : 0
그리고(AND)
또는(OR)
아님(NOT)


i=6이면 i>0은 성립하나(참) i<5는 성립하지 않는다(거짓).  i<5는 거짓이므로 연산식『 i>0 && I<5 』의 갓은 0(거짓 : 성립되지 않음)이다.

예제    if (c >= 'A' && c<='Z')  <처리>
          c>='A'이고 그리고(&&) c<='Z'이면,  즉 c가 A~Z 사이이면 <처리>를 수행

          if (! (c>='A' && c<='Z'))  <처리>
          c가 A~Z 사이가 아니면(!) <처리>를 수행

          while (i<0 || i>50)  <처리>
          i<이거나 또는(||) i>50이면 <처리>를 수행
               



비트 연산자

정수형 자료(char, int, short, long)에 대해 비트 단위로 연산을 수행한다.  (Bitwise Operator).  즉 수치를 2진수로 변환하여 비트 단위로 처리를 수행한다.  컴퓨터 초보자들은 일부 설명이 이해되지 않을 수도 있겠는데 이해되지 않아도 무방하다.  비트 연산자는 주로 시스템 프로그램을 작성할 때 사용된다.
 

연산자

기능

&
|
^
~

비트 AND
비트 OR
비트 XOR
비트 NOT
대응 두비트가 모두 1일 때만 결과로 1을 구한다.
대응 두비트중 하나라도 1이면 결과로 1을 구한다.
대응 두비트가 다르면 결과로 1을 구한다.
비트 1->0, 0->1로 바꾼다(Bit Toggle)

<<
>>

왼쪽 이동
오른쪽 이동
각 비트를 지정한 비트만큼 왼쪽으로 이동
각 비트를 지정한 비트만큼 오른쪽으로 이동


(1) 비트 논리 연산자

비트와 비트를 논리 연산하기 위하여 양쪽 오퍼랜드를 우선 2진수로 변환시킨 다음 비트별로 연산한다.  양쪽항은 정수형이어야 하고 연산자로는 &(AND), |(OR), ^(exclusive OR)가 있다.
우선 순위는 &>^>|순위이다.
이밖에 비트 논리 연산자로 ~가 있다 ~는 비트 논리 NOT 연산자이다.  어떤 값의 1의 보수값을 갖게 된다. 즉 비트별로 1은 0으으로 0은 1로 변환된다.
 

연 산 자

의         미

&

비트별로 대응하여 양쪽다 1이어야 1(참)

^

비트별로 대응하여 서로의 값이 다를 때 1(참)

|

비트별로 대응하여 양쪽이 0이어야 0(거짓)


(2) 시프트(shift) 연산자

시프트 연산자는 비트 단위 논리 연산자와 같이 비트 단위 연산을 하는 연산자이다.  정수형 데이터를 2진수로 바꾸어 비트 단위로 우측 또는 좌측으로 이동시켜 주는 연산자이다.

<형식>
변수 >> 이동 비트수 또는 변수 << 이동 비트수

변수, 이동 비트수는 정수형 데이터이어야 한다.  >>는 우측으로 비트를 이동비트수만큼 이동시키고 <<는 좌측으로 비트를 이동 비트수만큼 이동시킨다.  좌측으로 비트 이동시 뒷부분에 빈자리는 항상 0이 들어오고 우측으로 비트 이동시 앞부분에 빈 자리는 부호 비트와 같은 데이터가 채워진다.
좌측 시프트의 결과는 1 비트 좌측 시프트할 때마다 곱하기 2를 한 것과 동일하고 1 비트 우측 시프트할 때마다 나누기 2를 한 것과 동일하다.

(3) 비트 대입 연산자

비트 대입 연산자에는 다음과 같은 것들이 있다.

&= |= ^= <<= >>=

예를 들어 a &= 0x0F는『 a = a & 0x0F 』와 동일하다.  비트 대입 연산자는 그다지 사용되지 않는다.



연산자 우선 순위

C에는 연산자가 풍부한만큼, 한 연산식에 여러개의 연산자를 사용하는 경우에는 우선순위에 유의하여야 한다.  즉, 어떤 연산자가 우선적으로 먼저 처리되는가에 유의해야 한다.  또 한 연산식에 우선순위가 동일한 연산자가 연속적으로 복수개 사용되어 있는 경우 자료를 어느 방향으로 결합하는가(결합방향)에도 유의해야 한다.
 

연산자 종류

연산자

결합방향

우선순위

식, 구조체, 공용체 연산자 ( )  [ ]  ->  .  

높다


















낮다

단항 연산자 !  ~  ++  --  -
(형명칭) * & sizeof

<-

이항
연산자
승, 제 *  /  %  
가, 감 +  -  
비트 이동 <<  >>  
대소 비교 <  <=  >  >=  
등가 판정 == !=  
비트 AND &  
비트 XOR ^  
비트 OR |  
논리 AND &&  
논리 OR ||

  <-

조건 연산자

? :

<-

대입 연산자

= += -= *= /= %=

<-

나열 연산자

,  


위 표를 간단하게 요약하면 다음과 같다..

▶ 연산 우선 순위

1 순위 : ( ), [ ]

2 순위 : 단항 연산자(++, --, - ...)

3 순위 : *, /

4 순위 : +, -

5 순위 : 대입 연산자(=, +=, -=, ...)

6 순위 : 나열 연산자( , )

연산자의 우선순위에 확신이 서지 않는 경우에는 우선적으로 처리되게 하고자 하는 부분을 ( )로 둘러 싸주는 것이 가장 안전한 방법이다.



연산자 결합방향

한 연산식에 우선순위가 동일한 연산자가 연속적으로 나열되어 있을 때에는 앞의 표의『 결합방향 』에 의거 연산자의 대상 자료가 결합되어 연산된다.  각 연산자의 결합방향을 요약하면 다음과 같다.

▶ 대입/단항 연산자는 <- 방향으로 결합

▶ 여타 연산자는 -> 방향으로 결합


출처 : http://www.cworldlab.com/CandCplus/c/c-4.htm

Posted by 쿵캉켕