'cast'에 해당되는 글 2건

Programming/C C++
1. 산술연산자

 연산자  역활
 +  더하기
 -  빼기
 *  곱하기
 /  나누기
 %  나머지

#include <stdio.h>

main()
{
  int i;
  int j;
 
  i = 3;
  j = 2;
 
  printf("%d\n", i + j);
  printf("%d\n", i - j);
  printf("%d\n", i * j);
  printf("%d\n", i / j);
  printf("%d\n", i % j);
}



2. 관계연산자

 연산자  역활
 <  작다.
 >  크다.
 ==  같다.
 <=  작거나 같다.
 >=  크거나 같다.
 !=  같지않다.

#include <stdio.h>

main()
{
  int i;
  int j;
 
  i = 3;
  j = 2;
 
  if (i < j)
    printf("i가 j보다 작다.\n");
  
  if (i > j)
    printf("i가 j보다 크다.\n");
   
  if (i == j)
    printf("i와 j가 같다.\n");
   
  if (i != j)
    printf("i와 j가 같지않다.\n");
}



3. 관계연산자의 또다른 정의 방법

관계연산자를 통해 다음과 같은 구문이 작성하였습니다.

#include <stdio.h>

main()
{
  int i = 2;
  int j = 1;
  int t;
 
  if (i < j)
    t = i + j;
  else
    t = i - j;
   
  printf("결과 : %d\n", t);
}


위 program은 i가 j보다 작으면 i와 j를 더하여 t에 저장하고 i가 j보다 작지 않으면 i에서 j를 뺀 후 그 결과를 t에 저장하도록 하고 있습니다. 만일 위와 같은 조건식이 복잡하다고 생각되면 다음과 같이 작성하는 것도 가능합니다.

#include <stdio.h>

main()
{
  int i = 2;
  int j = 1;
  int t;
 
  t = (i < j) ? i + j : i - j;
   
  printf("결과 : %d\n", t);
}


'조건 ? 참일경우의 처리 : 거짓일 경우의 처리;' 의 형식으로 작성하면 위와 같은 조건식을 조금이나마 더 간단하게 표현할 수 있게 됩니다.

4. 논리연산자

 연산자  역활
 !  부정
 &&  그리고(and)
 ||  또는(or)

#include <stdio.h>

main()
{
  int i = 10;
  int j = 20;
 
  int a = 15;
  int b = 20;
 
  if ((i < j) && (a < b))
    printf("i가 j보다 작고 a가 b보다 작다.\n");
   
  if ((i < j) || (a > b))
    printf("i가 j보다 작거나 a가 b보다 크다.\n");
   
  if (!(i == a))
    printf("i가 a와 같지 않다.(i != a)와 같다.\n");
}



5. 대입연산자

 연산자  역활
 =  우변값을 좌변에 대입
 +=  좌변값과 우변값을 더한 후 좌변에 대입
 -=  좌변값에 우변값을 뺀 후 좌변에 대입
 *=  좌변값과 우변값을 곱한 후 좌변에 대입
 /=  좌변값과 우변값을 나눈 후 좌변에 대입
 %=  좌변값과 우변값을 나누고 그 나머지를 자변에 대입
 >>=  좌변값을 우변값만큼 오른쪽 shift연산 후 좌변에 대입
 <<=  좌변값을 우변값만큼 왼족 shift연산 후 좌변에 대입
 &=  좌변값과 우변값을 and연산 후 좌변에 대입
 |=  좌변값과 우변값을 or연산 후 좌변에 대입
 ^=  좌변값과 우변값을 xor연산 후 좌변에 대입

#include <stdio.h>

main()
{
  int i = 10;
  int j = 20;
 
  i = j;
  printf("j값을 i변수에 대입 %d\n", i);
 
  i += j;
  printf("i와 j를 더하고 그 결과를 i에 대입 %d\n", i);
 
  i -= j;
  printf("i에 j값을 감산한 후 그 결과를 i에 대입 %d\n", i);
 
  i *= j;
  printf("i와 j를 곱하고 그 결과를 i에 대입 %d\n", i);
 
  i /= j;
  printf("i와 j를 나누고 그 결과를 i에 대입(정수결과값 반환) %d\n", i);
 
  i = 10;
  j = 3;
 
  i %= j;
  printf("i와 j에 대한 나머지 결과를 i에 대입 %d\n", i);
 
  i = 5;
  j = 1;
 
  i >>= j;
  printf("i값을 j만큼 오른쪽 shift한 후 i에 대입 %d\n", i);
 
  i <<= j;
  printf("i값을 j만큼 왼쪽 shift한 후 i에 대입 %d\n", i);
 
  i = 3;
  j = 2;
 
  i &= j;
  printf("i값과 j값을 and연산(bit 기준) %d\n", i);
 
  i = 2;
  j = 3;
 
  i |= j;
  printf("i값과 j값을 or연산(bit 기준) %d\n", i);
 
  i = 2;
  j = 4;
 
  i ^= j;
  printf("i값과 j값을 xor연산(bit 기준) %d\n", i);
}



6. Shift연산

인간의 입장에서 가장 많이 쓰이는 숫자는 10진수입니다. 그에 반해 Computer는 0과 1만으로 이루어진 2진수를 씁니다. 0과 1만으로 Data를 처리하기가 가장 간단하기 때문에 그 만큼 단순화할 수 있기 때문입니다. 2진수를 10진수로 이해하기 위한 방법중의 하나로 2진수 각 자리를 2의 승수로 계산하는 방법이 있습니다. 예를 들어

10

이라는 2진수가 있으면 각 자리를 오른쪽 부터 20, 21순으로 계산하여 2 * 0, 2 * 1 을 하게되면 2 * 1에만 1이 있으므로 10진수로 2가 되는 것입니다.

Shift연산이라는 것은 이 2진수로 나열된 숫자를 밀어버리거나 당겨놓는 것을 의미하는 것으로 C언어를 통해

5 >>= 1

이라고 하면 '5를 2진수화 한 기준에서 1만큼 오른쪽으로 민다.'라는 의미가 됩니다. 따라서 5를 2진수로 분해하면

101

이 되고 이 상태에서 오른쪽으로 1만큼 밀면 결과는

10

이 됩니다.

마지막으로 이 10이라는 2진수를 10진수로 바꾸면 다음과 같은 결과가 생기게 됩니다.(왼쪽 Shift연산을 하면 0이 채워지게 됩니다.)

2

Shift연산자는 필요하다면 몇개든 사용할 수 있습니다.

5 >> 4 << 3 >> 2

7. and, or, xor연산

and연산은 연산하고자 하는 피연산자의 bit가 1일때만 1이 되는 연산입니다. 참고로 and와 or, xor연산도 Shift연산처럼 2진수를 기준으로 연산합니다.

10진수 3을 2진수로 -> 11
10진수 2를 2진수로 -> 10

11과 10을 and연산하면 1이 있는 것만 1이되므로 결과는 10(10진수 2)이 됩니다.

and는 피연산자가 모두 1이여야만 결과가 1이지만 or연산자는 둘줄 하나만 1이여도 결과가 1이 됩니다.

10진수 2를 2진수로 -> 10
10진수 3을 2진수로 -> 11

10과 11을 or연산하면 둘중 하나만 1이 있어도 1이되므로 결과는 11(10진수 3)이 됩니다.

and와 or는 피연산값이 1인가 0인가에 따라 결과가 달라지지만 xor는 피연산자값이 같은가 틀린가에 따라 결과가 달라집니다.

10진수 2를 2진수로 ->  10
10진수 4를 2진수로 -> 100

10과 100을 xor연산하면 처음 두자리 까지는 상호 값이 다르므로 1이고(비어있는 부분은 자동으로 0이 됩니다.) 마지막 한자리는 둘다 값이 0이므로 연산값은 0이 됩니다. 따라서 결과는 110 (10진수 6)이 됩니다.

참고 :
산술연산자와 Shift연산자, and/or/xor연산자는 모두 뒤에 =기호가 붙어있어서 대입관련 연산자가 되지만 =기호만 빼면 각각의 역활을 별도로 수행하는 연산기호가 됩니다.(and, or, xor연산자는 모두합쳐 bit연산자라고도 합니다.)

8. sizeof 연산자

sizeof는 특정 Data형의 크기값을 반환하는 연산자중의 하나입니다.

#include <stdio.h>

main()
{
  int i;
 
  printf("int형 크기 : %d\n", sizeof(i));
}



9. cast 연산자

특정 Data형을 다른 Data형으로 변환하기 위한 연산자입니다.

#include <stdio.h>

main()
{
  int i = 10;
  
  printf("%f\n", (float)i);
}


(float)i 를 통하여 int형 변수 i를 float형으로 변환하여 출력합니다.


참고 :
Data형이 작은 것과 Data형이 큰것끼리 큰 Data형을 기준으로 연산하게 되면 자동 형변환되어 연산됩니다.

#include <stdio.h>

main()
{
  char c = 10;
  int i = 1000;
 
  printf("%d\n", c + i);
}



10. 증/가감 연산자

 연산자  역활
 ++  1더한다.
 --  1뺀다.

증/가감 연산자는 피연산자의 값을 1증가하거나 1감소시키는 역활을 합니다.

#include <stdio.h>

main()
{
  int i = 1;
 
  ++i;
 
  printf("%d\n", i);
}



하지만 ++나 --연산자가 다른 연산자와 함께 연산되는 경우 증/가감연산자가 앞에 있으면 선증가/선감소 되고 뒤에 있으면 후증가/후감소되어 약간씩 다른 결과를 나타낼 수도 있습니다.

예를 들어

int i = 100;
int j;
j = ++i - 50;

라고 하면 ++연산자가 앞에 있으므로 먼저 i값을 1증가 시킨 후 - 50을 계산하게 됩니다. 반면

int i = 100;
int j;
j = i++ - 50;

위와 같이 ++가 피연산자의 뒤에 위치하게 되면 먼저 - 50을 계산한 후에 i값을 1증가시키게 됩니다.

#include <stdio.h>

main()
{
  int i = 100;
  int j;
 
  j = ++i - 50;
  printf("%d\n", i);
  printf("%d\n", j);
 
  i = 100;
 
  j = i++ - 50;
 
  printf("%d\n", i);
  printf("%d\n", j);
}



11. bit 연산자

 연산자  역활
 &  and 연산
 |  or 연산
 ^  xor 연산
 ~  반전

bit연산자는 피연산자의 bit부호를 가지고 연산을 수행하는 연산자 입니다.

#include <stdio.h>

main()
{
 char i = 5;
 char j = 4;
 i = i & j;
 printf("%d\n", i);
}


i의 값과 j의 값을 &(and) 연산합니다.

먼저 &(and)연산은 두 bit가 1이되야만 결과가 1이 되는 연산입니다. i의 5와 j의 4라는 값을 bit로 분해해 보면 다음과 같이 되며(Char 형은 8bit크기(128)의 Data형입니다.)

i 값 5 => 00000101
j 값 4 => 00000100

bit값 중에서 같은 위치에 둘다 1인것은 뒤에서 세번째 bit밖에 없으므로 and연산의 결과는

00000100 => 정수값 4

가 되는 것입니다.


#include <stdio.h>

main()
{
 char i = 5;
 char j = 4;
 i = i | j;
 printf("%d\n", i);
}


i와 j값을 |(or) 연산합니다.

|(or)연산은 두개의 피연산자중 하나만 1이여도 결과가 1이되는 연산입니다.

5 => 00000101
4 => 00000100
-------------
결과 00000101 (5)


#include <stdio.h>

main()
{
 char i = 5;
 char j = 4;
 i = i ^ j;
 printf("%d\n", i);
}


i와 j값을 ^(xor)연산합니다.

^(xor)연산은 두 피연산자가 0이든 1이든 서로 다른 값을 가져야만 결과가 1이되는 연산입니다.

5 => 00000101
4 => 00000100
-------------
결과 00000001 (1)


#include <stdio.h>

main()
{
 char i = 128;
 
 i = ~i;
 printf("%d\n", i);
}


i값의 모든 bit를 반전시킵니다.

~연산은 피연산자의 bit를 모두 반전시키는 연산자입니다.

128 => 10000000
---------------
반전    01111111 (127)

'Programming > C C++' 카테고리의 다른 글

[C, C++] Object(obj)와 Link  (0) 2011.02.10
[C, C++] 상수(숫자, 문자, 문자열, 열거형) 정의및 사용  (0) 2011.02.09
[C, C++] 연산자  (0) 2011.02.08
[C, C++] 제어문  (0) 2011.02.01
[C, C++] 공용체  (0) 2010.09.27
[C, C++] Volatile  (0) 2010.09.15
0 0
Programming/Microsoft SQL Server
Cast와 Convert는 모두 숫자를 문자열형이나 실수형으로 바꾸는 등의 형변환을 해주는 함수입니다.

1. Cast

특정 Data를 명시적으로 바꾸어 주는 함수로서 기본적은 구문은 다음과 같습니다.

Cast(데이터 As 변환형)

Data에는 변환대상을, 변환형에는 변환하고자 하는 형을 입력합니다.

Select cast('123' As Int) + 123;

문자열 123을(' <- 문자로 둘러 싸서 문자열로 표현하였습니다.) Int형으로 변환하고 123값을 더해 줍니다.


물론 위와 같은 상황에서는 굳이 cast함수를 쓰지 않아도 자동으로 형변환이 가능합니다.

Select '123' + 123;

그러나 되도록이면 Cast함수를 사용하여 명시적인 형변환을 하십시오. 가독성은 물론이거니와 자동형변환이 되지 않는 경우에는 오류가 발생할 여지가 많기 때문입니다. 또한 경우에 따라서는 원하지 않는 결과를 가져 오기도 합니다.

2. Convert

Convert또한 Cast와 마찬가지로 형변환을 해주는 함수 입니다. 차이점은 아래 구문형식처럼 형변환에 대한 형태(Style)를 지정할 수 있다는 것입니다.

Convert(변환형, 데이터, 형태)

또한 Convert는 날짜형을 변환하는데 유용하게 사용될 수 있습니다. 이때 날짜를 표현하는데는 여러가지 형식이 있을 수 있는데 이 형식을 Convert에서 지정하여 원하는 형식을 얻을 수 있습니다.

Select convert(Char(08), GetDate(), 112);
Select convert(Char(10), GetDate(), 120);


기타 Convert를 통한 날짜형식의 변환은 다음글을 참고해 주시기 바랍니다.

[Develop/SQL Server] - [SQL] 시간관련 형식 변환

비슷한 함수로 Try_Convert함수도 존재합니다. Convert와 같지만 변환에 실패하는 경우 NULL을 반환합니다.

3. Parse

특정 데이터를 지정한 형식으로 읽어들이는 함수입니다. 특히 일반문자열에서 날짜형식으로 변환하고자 하는 경우 유용하게 사용될 수 있습니다.

Select Parse('2016.12.31' As Date);

Try_Parse함수는 Parse와 같지만 변환에 실패하면 NULL을 반환합니다.


0 0
1
블로그 이미지

클리엘