달력

5

« 2020/5 »

  •  
  •  
  •  
  •  
  •  
  • 1
  • 2
  • 31
  •  
  •  
  •  
  •  
  •  
  •  


 

변환(Type Conversion)

·       초기화 시에만 변환 적용됩니다.

·       하나의 타입을 다른 타입으로 바꾸는 것을 의미합니다.

·       타입 변환이라고도 합니다.

 

 

 

 

변환(Type Conversion) 종류

기본 자료형 값을 다른 자료형으로 변환할 있는 기능을 의미하며 가지 종류가 있습니다.

boolean형을 제외한 나머지 기본 타입 간의 타입 변환을 자유롭게 수행할 있습니다.

·       프로모션(promotion)

·       디모션(demotion)

 

 

 

 

 

프로모션(promotion)

·       자료형으로 변환

·       작은 자료형 -> 자료형

·       대입 연산자에서 왼쪽의 자료형이 오른쪽 결과의 자료형보다 발생합니다.

·       정보의 손실 없음

·       내부적으로 자동으로 형변환을 수행합니다.(자동 형변환; 묵시적 형변환; Implicit Type Conversion)

short s=7;

float f = s + 3.14f;

 

 

 

산술연산식에서 자동 형변환

산술연산식

연산 결과

정수 산술연산자 문자

정수

정수 산술연산자 정수

정수

정수 산술연산자 실수

실수

실수 산술연산자 정수

실수

실수 산술연산자 실수

실수

 

 

 

 

 

 

 

디모션(demotion)

·       작은 자료형으로 변환

·       자료형 -> 작은 자료형

·       경우에 따라 정보의 손실 발생

·       사용자가 형변환을 직접 지정합니다.(명시적 형변환; Explicit Type Conversion)

int i = 0;

short s=10;

i = (int)(10 + 3.5f);

 

 

 

명시적 형변환

·       자동 변환 발생지점을 표시하기 위해서 사용(의도한 변환임을 표시)

·       자동 변환의 규칙에 위배되지만 변환 필요한 상황에 사용(디모션)

·       중괄호 사용하여 표현하며 괄호를 타입 캐스트(type cast) 연산자라고 합니다.

 

(자료형)

(자료형)수식

 

 


Posted by codedragon codedragon

댓글을 달아 주세요


 

형변환

타입의 데이터가 다른 타입으로 변환하는 형변환, 자료형 변환, 타입 변환이라고 합니다.

타입 변환은 크게 자동 타입 변환과 강제 타입 변환으로 구분됩니다.

 

 

 

자료형 변환의 종류

자동 형변환

컴파일러가 자동 형변환 시킵니다

강제 형변환

프로그래머가 강제 형변환 시킵니다

 

 

 

자동 형변환

·       다른 자료형 산술 연산의 경우에 작은 자료형에서 자료형으로 자동 형변환

 

 

정수 + 실수 또는 실수 + 정수와 같은 산술 연산을 하는 경우 자동 형변환

#include <stdio.h>

int main(void)

{

   int       num1=100;        // 정수

   double num2=3.14;        // 실수

   printf("%lf \n", num1+num2);    // 정수 + 실수

   return 0;

}

 

 

자료형 변환 우선순위 (작은 자료형에서 자료형으로…) 자동 형변환

char < int < long < float < double < long double

 



 

대입 연산자를 기준으로 오른쪽에서 왼쪽으로 자동 형변환

#include <stdio.h>

int main(void)

{

   char     num1=130;

   int       num2=3.14;

   double num3=3;

   printf("%d, %d, %lf \n", num1, num2, num3);

   return 0;

}

 

 

Posted by codedragon codedragon

댓글을 달아 주세요

   

   

자바의 자동 형변환 규칙(Implict Conversion)

값의 표현 범위로 자동 형변환됩니다.


   

 

double num = 3.14f + 10;

//10 10F 자동 형변환

 


Posted by codedragon codedragon

댓글을 달아 주세요

   

자동 형변환(대입 연산자)

대입 연산자를 기준으로 오른쪽에서 왼쪽으로 자동 형변환

   

   

소스코드

   

#include <stdio.h>

int main(void) {

//문자형(작은 자료형) = int( 자료형)

//127까지 표현범위인데 130이므로 오버플로우 발생한 값을 다시 문자형으로 저장

char num1=130; //데이터 오버플로우 발생

//정수(작은 자료형) = 실수(큰자료형)

int num2=3.14; //데이터 손실

//실수( 자료형) = 정수(작은 자료형)

double num3=5; //데이터 손실 없음

printf("%d, %d, %lf \n", num1, num2, num3);

return 0;

}


   

   

출력결과

   

   

Posted by codedragon codedragon

댓글을 달아 주세요

자동 형변환 (산술연산)

다른 자료형 간 산술 연산의 경우에 작은 자료형에서 큰 자료형으로 자동 형변환

   

   

소스코드

   

#include <stdio.h>

int main(void) {

int num1=100; // 정수

double num2=3.14; // 실수

//작은 자료형에서 자료형으로 자동 형변환

printf("%lf \n", num1+num2); // 정수 + 실수

printf("%lf \n", num1/num2); // 정수 + 실수

//2째자리까지 출력

printf("%.2lf \n", num1+num2); // 정수 + 실수

return 0;

}


   

   

출력결과

   

Posted by codedragon codedragon

댓글을 달아 주세요

 

   

형변환으로 인한 데이터 손실

데이터 손실이 없는 경우

  • int형 (작은 자료형) 에서 double형(큰 자료형)으로 변환되는 경우
  • 정수와 정수를 나누는 경우

데이터 손실이 있는 경우

double형 (큰 자료형) 에서 int형(작은 자료형)으로 변환되는 경우

자동형변환으로 인한 데이터 손실을 최소화 하기 위해 강제 형변환 수행

   

   

강제 형변환

  • 큰 자료형에서 작은 자료형으로 변환시 사용
  • 프로그래머가 강제로 형변환을 해줍니다.
  • 이미 정의된 자료형을 강제적으로 다른 자료형으로 변환하는 것
  • 괄호 연산자 ( )를 사용하여 바꿀 자료형 표시

int num=10

(double)num; //(바꿀 자료형)변수

   

   

Posted by codedragon codedragon

댓글을 달아 주세요

자동형 변환-프로모션/디모션

   

   

소스코드

  1.  public class CastEx03 {
  2.         public static void main(String[] args){
  3.                  
  4.                  
  5.                 System.out.println("");
  6.                 System.out.println("=========프로모션=========");
  7.                 /*프로모션:
  8.                 자료형으로 승격이 일어나는 형태
  9.                 정보의 손실이 전혀 없으며 자동적으로 발생*/
  10.                 byte b1 = 127;
  11.                 byte b2 = 127;
  12. //              byte b3 = b1 + b2;      //Error: cannot convert from int to byte
  13.                 int i1 = b1 + b2;      
  14.                 /*32bit(4byte)미만 byte 데이터 연산시 32bit int형으로 승격됩니다. 데이터 타입이 다르므로 , int형은 byte형으로 저장되지 않습니다.
  15.                 Error: cannot convert from int to byte*/
  16.                 System.out.println("i1= " + i1 );
  17.                 System.out.println("b1 + b2 = " + (b1+b2) );    // 자동적으로 int 형변환 됩니다.
  18.                  
  19.                 System.out.println("");
  20.                 short s1 = 12345;
  21.                 short s2 = 12345;
  22.                 int i2 = s1 + s2;
  23. //              32bit(4바이트)미만 shore 데이터 연산시 32bit int형으로 승격
  24.                 System.out.println("i2= " + i2 );
  25.                 System.out.println("s1 + s2 = " + (s1+s2) );    // 자동적으로 int 형변환 됩니다.
  26.                  
  27.                 System.out.println("");
  28.                 int int1 = 12345;
  29.                 long lg1 = 1234567L;
  30. //              long            = int           long
  31.                 long resultL = int1 +   lg1;    // int -> long 자동적으로 형변환
  32.                 System.out.println("resultL = " + resultL);
  33.                  
  34.                 System.out.println("");
  35.                 int int2 = 12345;
  36.                 double d1 = 100.3D;
  37.                 double resultD= int2 + d1;      // int -> double 자동적으로 형변환
  38.                 System.out.println("resultD = " + resultD);
  39.                  
  40.                  
  41.                 System.out.println("");System.out.println("");
  42.                 System.out.println("=========디모션=========");
  43.                 /*디모션:
  44.                 작은 자료형으로 강등
  45.                 자료의 손실이 있을 있음
  46.                 명시적으로 형변환해야 */
  47.                 byte b4 = 125;
  48.                 byte b5 = 125;
  49.                 byte result_byte = (byte)(b4 + b5);    
  50.                 //연산결과로 int 자동으로 형변환 되므로 byte 자료형을 유지하기 위해 int -> byte 강제 형변환
  51. //              (byte): 캐스트 연산자를 사용하여 강제 형변환
  52.                 System.out.println("result_byte = " + result_byte);
  53.                 System.out.println("b4 + b5 = " + (b4 +b5) );
  54.                  
  55.                 System.out.println("");
  56.                 short s4 = 1234;
  57.                 short s5 = 1234;
  58.                 short result_short = (short)(s4 + s5);
  59.                 System.out.println("s4 + s5 = " + (s4 +s5) );
  60.                 System.out.println("result_short = " + result_short);
  61.                  
  62.                 System.out.println("");
  63.                 int int3 = 1234;
  64.                 float f1 = 100.5F;
  65. //              int result_int1 = int3 + f1;
  66.                 int result_int2 = int3 + (int)f1;       //float ->int 강제 형변환 (절삭됨)
  67.                 System.out.println("int3 + f1 = " + (int3 + f1) );
  68.                 System.out.println("result_int2 = " + result_int2);
  69.                  
  70.                 System.out.println("");
  71.                 int int4 = 1234;
  72.                 long lg2 = 1234L;
  73.                 int result_int3 = int4 + (int)lg2;      //long -> int 강제 형변환
  74.                 System.out.println("int4 + lg2 = " + (int2 +lg2) );
  75.                 System.out.println("result_int3 = " + result_int3);
  76.                  
  77.                  
  78.                  
  79.         }
  80.    
  81. }


   

   

출력결과

   

Posted by codedragon codedragon

댓글을 달아 주세요

   

자료형 변환-표현방법의 변환을 의미

   

소스코드

  1.  public class CastEx02 {
  2.    
  3.         public static void main(String[] args)
  4.         {
  5.                 short num1=10;
  6.                 short num2=20;
  7.                 short result=(short)(num1 + num2);
  8.                 //short to int -> 연산 -> int to short (내부적으로 자동으로 일어남)
  9.                  
  10.                 System.out.println(result);
  11.         }


   

   

   

출력결과

   

Posted by codedragon codedragon

댓글을 달아 주세요

   

자동형 변환을 통해 문자의 유니코드 값 출력

   

   

소스코드

  1.  public class CastEx01 {
  2.    
  3.         public static void main(String[] args)
  4.         {
  5.                 char ch1='A';
  6.                 char ch2='Z';
  7.                          
  8.                 int num1=ch1;
  9.                 int num2=(int)ch2;
  10.    
  11.                 System.out.println("문자 A 유니코드 : "+num1);
  12.                 System.out.println("문자 Z 유니코드 : "+num2);     
  13.         }
  14. }


   

   

출력결과

   

Posted by codedragon codedragon

댓글을 달아 주세요

형변환

자동 형변환

명시적 형변환

   

   

var input = prompt('숫자를 입력하세요', '숫자');

   

출처: <https://github.com/10zeroone/study_javascript/blob/master/WebContent/ch01-variable/09.html>

   

   

   

   

   

자동 형변환

document.write(typeof(input) + ':' + input);

document.write('<br>');

//input 저장된 데이터의 타입이 String이기 때문에 +연산자를 사용하면 덧셈에 대한 연산이 수행되지 않고

//문자끼리 연결되어

//덧셈 연산을 수행하려면 명시적으로 형변환을 해야

document.write(input + 10);                

document.write('<br>');

//만약에 입력한 데이터가 숫자가 아니고 문자열일 경우는 NaN(Not a Number) 출력

document.write(input * 10);                //자동형변환

document.write('<br><br>');

   

출처: <https://github.com/10zeroone/study_javascript/blob/master/WebContent/ch01-variable/09.html>

   

   

   

명시적 형변환

//문자 -> 숫자

var numberInput = Number(input);

document.write('형변환 이후 <br>');

document.write(typeof(numberInput)+ ':' + numberInput + '<br>');

document.write(numberInput + 10);        

   

출처: <https://github.com/10zeroone/study_javascript/blob/master/WebContent/ch01-variable/09.html>

   

   

전체 소스

<html>

<head>

<meta charset="UTF-8">

<title>형변환</title>

<script type="text/javascript">

//내용                , 입력박스에 미리 보여지는 글자

var input = prompt('숫자를 입력하세요', '숫자');

document.write(typeof(input) + ':' + input);

document.write('<br>');

//input 저장된 데이터의 타입이 String이기 때문에 +연산자를 사용하면 덧셈에 대한 연산이 수행되지 않고

//문자끼리 연결되어

//덧셈 연산을 수행하려면 명시적으로 형변환을 해야

document.write(input + 10);                

document.write('<br>');

//만약에 입력한 데이터가 숫자가 아니고 문자열일 경우는 NaN(Not a Number) 출력

document.write(input * 10);                //자동형변환

document.write('<br><br>');

//명시적 형변환

//문자 -> 숫자

var numberInput = Number(input);

document.write('형변환 이후 <br>');

document.write(typeof(numberInput)+ ':' + numberInput + '<br>');

document.write(numberInput + 10);        

</script>

</head>

<body>

</body>

</html>

   

출처: <https://github.com/10zeroone/study_javascript/blob/master/WebContent/ch01-variable/09.html>

   

'Development > JavaScript, jQuery, ...' 카테고리의 다른 글

변수의 재정의  (0) 2014.05.30
변수  (0) 2014.05.30
형변환  (0) 2014.05.30
12.html-기본타입(null과 undefined)  (0) 2014.05.28
11.html-기본타입(불린(boolean))  (0) 2014.05.28
10.html-기본타입(문자열)  (0) 2014.05.28
Posted by codedragon codedragon

댓글을 달아 주세요