Beny's Study

03. 이항연산자_산술연산자 본문

[JAVA]/02.연산자

03. 이항연산자_산술연산자

76beny 2022. 4. 12. 13:20

목차

- 산술연산자

-나머지연산자

-사칙연산자

-산술연산자의 형변환

- 산술변환

 


산술연산자

■ 일반 수학과 동일한 연산 방법, 우선순위. 단, %는 나누기의 나머지 값을 구하는 연산

■ 사칙연산 + , - , * , /  와 나머지연산 % 로 구성됨

 

나머지연산자(모듈러)

  • 오른쪽 피연산자로 나누고 남은 나머지를 반환
  • 10/8→ 1 (몫) 10%8→2(10을 8로 나눴을때 나머지값)
  • 나누는 피연산자는 0이아닌 정수만 허용. (부호는 무시됨)
  • 즉, system.out.println(10%8)=system.out.println(10%-8)⇒ 나머지는 2로 동일함 (부호무시)
  • //모듈러연산
    		System.out.println("모듈러연산");
            
    		c = 10 % 3;
    		System.out.println(c);//1
            
    		c = 10 % 2 ;
    		System.out.println(c);//0
            
    		c = 9 % 3;
    		System.out.println(c);//0
            
    		//활용 : 배수찾기 문제, 홀짝 문제 풀때

 

사칙연산자

package com.kh.ex02.arithmetic_operator;

public class ArithmeticOperator {
	//산술연산자(ArithmeticOperator)
	// +-*/%
	
	
	public static void main(String[] args) {
		int a = 10;
		int b = 2;
		int c = 0;
		
		
		
		System.out.println("사칙연산");
		System.out.println(a + b);//12
		System.out.println(a - b);//8
		System.out.println(a * b);//20
		System.out.println(a / b);//5
		System.out.println(a / 3);//3//int형이라 소수점이하가 버려짐
		System.out.println(a / 3.0);// 소수점보이는 방법1
		System.out.println(a /(double)3);//소수점 보이는 방법2 (casting)
		
		//bt zero : java.lang.ArithmeticException //산술예외
//		System.out.println(a / 0);//에러발생하는 문장!
public static void main(String args[]) { 
		int a = 10;
		int b = 4;

		System.out.printf("%d + %d = %d%n",  a, b, a + b);//10+4=14
		System.out.printf("%d - %d = %d%n",  a, b, a - b);//10-4=6
		System.out.printf("%d * %d = %d%n",  a, b, a * b);//10*4=40
		System.out.printf("%d / %d = %d%n",  a, b, a / b);//10/4=2, int타입이라 소수점 생략
		System.out.printf("%d / %f = %f%n",  a, (float)b, a / (float)b);
     //10/4.0000=2.50000, 소수점 표시
	}
}

산술연산자의 형변환

■ 사칙연산 시 type의 크기가 큰쪽으로 자동 형변환된다.= 값손실 없음.

■ short랑 char사이에서는 형변환 불가능 (범위가 달라서)→수동으로 작성

■ byte~long까지는 정수형, float~double는 실수형.

System.out.println("정수형 + 실수형");
		//사칙연산시 type의 크기가 큰쪽으로 자동 형변환 된다.
		float pi = 3.14f;//long보다 큰 범위//4바이트
		double x = 1.12345678912;//8바이트
		int i = 0;//4바이트
		
		System.out.println(pi + i);//float
		System.out.println(pi + x);//double
		System.out.println(pi + (float) x);//float
```java
float f=1234;// = 대입연산자의 타입은 같아야 함, 1234(int)숨겨져있음(생략됨)
float f=(float)1234;//컴파일러가 자동으로 형변환.

int i=3.14f;//에러뜸 왜냐면 f범위가 i보다 크기때문에 값손실 발생해서 에러뜸
-> int i=(int)3.14f;//OK.직접 (int)입력해서 형변환.

byte b=100;//OK.예외적인 경우로 값이 100(상수)인걸 알고 byte범위가 -128~127이라서 값손실이 없기때문에
-> byte b=(byte)100;

int i=100;
byte b=i;//에러 ->i는 변수인데 i가 뭔지 컴파일러가 정확하게 파악못해서 수동으로 입력
->byte b=(byte)i;//수동입력
```

산술변환

  • 산술변환
    • 연산 전에 피연산자의 타입을 일치시키는 것.(하단 2가지 중요)
    1. 두 피연산자의 타입을 같게 일치시킨다 (보다 큰타입으로 일치:값손실최소화 )float+int → float+float→float//4바이트+4바이트
    2. double+float → double+double→double//8바이트+4바이트
    3. long+int → long+long→long//8바이트+4바이트
    4. 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.(int:4바이트)
    5. byte+short→int+int→int//1바이트+2바이트 char+short→int+int→int//2바이트+2바이트
public static void main(String args[]) { 
		//int a = 1_000_000;    // 1,000,000   1백만 
		//int b = 2_000_000;    // 2,000,000   2백만 

		//long c = a * b;       // a * b = 2,000,000,000,000 ?

		//System.out.println(c);//-1454759936 이 출력됨 ( 오버플로우발생)
		


		int a = 1_000_000;    // 1,000,000   1백만 =10의6제공
		int b = 2_000_000;    // 2,000,000   2백만 =10의6제곱
		//10의12제곱, int의범위는10의9제곱  범위를 벗어나서 -1454759936출력되버림.

		long c = (long)a * b;       // a * b = 2,000,000,000,000 ?
		//a나 b를 long로 형변환 해주어야 함.

		System.out.println(c);//200000000000
	}
}

 


"본 인터넷 사이트 내의 모든 이미지, 문구, 콘텐츠, 내용 등에 대한 저작권은 76beny에게 있습니다.

이를 무단으로 도용, 복사, 전재, 재배포, 2차 변형 등을 할 경우

민, 형사상 법적 조치 등 저작권법에 의거하여 처벌 받을 수 있습니다."