JAVA

[JAVA] 형변환과 연산자

(งᐛ)ว 2023. 8. 11. 00:18
728x90
728x90

형변환(Casting) : 자료형을 다른 자료형으로 타입변환 

 

자동형변환, 묵시적형변환, 업캐스팅(Promotion)_데이터 크기가 작은 자료형 -> 큰 자료형

 

double d = 100.5; //8byte

int n = 200; //4byte

d=n; //**d와 n이 같다는 것이 아닌 n을 d로 대입한다는 의미

System.out.println("d의 값: "+d); //200.0

 

char c = 'A'; //2byte

int i = 100; //4byte

i=c;

System.out.println("i의 값: "+i); //65 **아스키코드

 

 

강제형변환, 명시적형변환, 다운캐스팅(Demotion)_데이터 크기가 큰 자료형 -> 작은 자료형

 

char c= 'B'; //2byte

int n = c+1; //여기까지는 자동형변환

c=(char)n; //c는 2byte, n은 4byte이므로 오류발생. (char)n으로 명시해야함!

System.out.println("c의 값: "+c); //C

 

float f =5.5f; //실수

int n1 =0; //정수

n1=(int)f; //같은 4byte라도 자료형이 다르면 캐스팅(형변환)하는 것이 원칙

System.out.println("n1= "+n1); //5 **실수에서 정수로 형변활 할 때는 소수점 이하가 유실되므로 주의


연산자(Operator) : 연산기능이 있는 기호

 

산술연산자 : 사칙연산과 나머지 값을 구하는 %로 나뉜다.

int n1n2n3//3개를 동시에 선언

n1=20;

n2=7;

 

n3= n1+n2;

System.out.println("n3의 값: "+n3); //27

n3 = n1-n2

System.out.println("n3의 값: "+n3); //13

n3 = n1/n2;

System.out.println("n3의 값: "+n3); //2

n3 = n1%n2;

System.out.println("n3의 값: "+n3); //6

 

 

 

 

 

복합대입연산자 : 산술연산자+대입연산자 (=, +=, -=, *=, /=, %=), 역방향 연산

int n1=10;

int n2=7;

 

//n1+=n2 => n1=n1+n2

System.out.println("+=연산자 : n1+=n2="+(n1+=n2));

System.out.println("n1 : "+n1); //17

 

//n1-=n2 => n1=n1-n2

System.out.println("-=연산자 : n1-=n2="+(n1-=n2));

System.out.println("n1 : "+n1); //10

 

//n1*=n2 => n1=n1*n2

System.out.println("*=연산자 : n1*=n2="+(n1*=n2));

System.out.println("n1 : "+n1); //70

 

 

 

 

 

비교연산자 : 변수나 상수의 값을 비교하여 참, 거짓을 판단 (>, <, >=, <=, ==, !=)

int n1=10;

int n2=20;

boolean result;

 

result = n1 < n2;

System.out.println("n1 < n2 : "+result); //T

result = n1==n2; // 같으면 T, 다르면 F

System.out.println("n1 == n2 : "+result); //F

result = n1!=n2; // 같으면 F, 다르면 T

System.out.println("n1 != n2 : "+result); //T

 

 

 

 

 

논리연산자 : 논리형 데이터 연산 (&&, ||, !)

&& : AND의 의미. 앞뒤 연산이 모두 true여야 true반환

int a = 30;

int b = 36;

result = (a-b)<=5 && (a+=1)>30;

System.out.println("&&연산결과 : "+result); //T

 

|| : OR의 의미. 앞뒤 연산 중 하나만 true라도 true반환

int i1 = 10;

int i2 = 20;

result = (i1+=10) > 20 || i2 -10 == 11;

System.out.println("||연산결과 : "+result); //F

 

not 연산 (!) : true를 false로, false를 true로 만드는 기능

System.out.println("||연산결과 : "+!result); //T

 

 

 

 

 

증감연산자 : 값을 1씩 증가 또는 감소시키는 연산 (++, --)

선행증감 : ++변수, --변수

int a = 10;

System.out.println("a : "+ ++a); //11

System.out.println("a : "+ --a); //10

 

후행증감 : 변수++, 변수--

int b = 10;

System.out.println("b : "+ b++); //10

System.out.println("b : "+ b); //11

System.out.println("b : "+ b--); //11

System.out.println("b : "+ b); //10

 

 

 

비트연산자 : 비트(2진수)단위로 계산 (&, |, ^, ~)

int a = 10; //1010

int b = 7; //0111

 

& : 논리곱(AND) - 두 값이 모두 1일때 1, 나머지는 0 (같은 자리 2진수끼리 비교) 

int c = a & b; //0010

System.out.println("논리곱: "+ c); //2  **출력할땐 다시 10진수로 돌려줌 

 

|| : 논리합(OR) - 둘 중 하나만 1이어도 1, 나머지는 0 (같은 자리 2진수끼리 비교) 

int c = a | b; //1111

System.out.println("논리합: "+ c); //15  **출력할땐 다시 10진수로 돌려줌 

 

^ : 배타적논리합(XOR) - 서로 다르면 1, 같으면 0 (같은 자리 2진수끼리 비교) 

int c = a ^ b; //1101

System.out.println("배타적논리합: "+ c); //13  **출력할땐 다시 10진수로 돌려줌 

 

~ : not연산자

int c = ~ a;

System.out.println("not a : "+ c); //-11 **-(숫자+1)

 

 

 

 

 

시프트연산자 : 왼쪽이나 오른쪽으로 비트를 옮기는 연산자(>>, <<)

int a = 10; //1010

int b = 7; //0111

 

System.out.println("a<<1 : "+(a<<1)); //20 

//왼쪽으로 비트한칸 옮기겠다 : 기존 00001010 => 이동 00010100

System.out.println("a>>1 : "+(a>>1)); //5

//오른쪽으로 비트한칸 옮기겠다 : 기존 00001010 => 이동 00000101

 

 

 **2진수를 10진수로 변경하는 방법

https://blog.naver.com/ttt5224/221894564749

 

 

 

항연산자(조건연산자) : 조건을 정의하여 그 조건이 참일 때 반환할 값과 거짓일 때 반환할 값을 반환

조건식 ? 참일때반환값 : 거짓일때반환값;

조건식은 결과를 참,거짓으로 반환하는 식으로 주로 비교연산자, 논리연산자가 온다.

반환값에 따라 자료형이 다르니 주의 

 

int a =10;

int b =15;

 

boolean result1 = ++a>=b ? true : false;

System.out.println("result1 : "+result1); //false

 

int n1 = 10;

int n2 = 20;

 

char result2 = (n1+=n1)==n2 ? 'O' : 'X';

System.out.println("result2 : "+result2); //O

 

 

 

 

//Q.상자 하나에 공이 5개 들어갈 수 있다. 만약 공 23개를 담아야 한다면 필요한 상자의 개수는? (삼항연산자 이용)

 

int box;

int ball = 23;

box = ball % 5 == 0 ? ball/5 : (ball/5)+1; //ball이 5의 배수라면(5로 나눈 나머지가 0이라면) 몫을, 5의배수가 아니라면 몫+1을 반환하자.

System.out.println("필요한 상자 개수 : "+box); //5

 

 

**배수 구하기

n % 3 ==0 => n은 3의 배수

n % 5==0 => n은 5의 배수 ...

 

 

 

 

 

참조

https://blog.naver.com/ttt5224/221894564749

728x90

'JAVA' 카테고리의 다른 글

[JAVA] 제어문 - 조건문 if  (0) 2023.08.12
[JAVA] Scanner  (0) 2023.08.12
[JAVA] printf와 이스케이프 문자  (0) 2023.08.12
[JAVA] 자료형과 변수  (0) 2023.08.10
[JAVA] 유용한 사이트 모음 (영타, 코테 등)  (0) 2023.08.09