Beny's Study
03. 이항연산자_산술연산자 본문
목차
- 산술연산자
-나머지연산자
-사칙연산자
-산술연산자의 형변환
- 산술변환
산술연산자
■ 일반 수학과 동일한 연산 방법, 우선순위. 단, %는 나누기의 나머지 값을 구하는 연산
■ 사칙연산 + , - , * , / 와 나머지연산 % 로 구성됨
나머지연산자(모듈러)
- 오른쪽 피연산자로 나누고 남은 나머지를 반환
- 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가지 중요)
- 두 피연산자의 타입을 같게 일치시킨다 (보다 큰타입으로 일치:값손실최소화 )float+int → float+float→float//4바이트+4바이트
- double+float → double+double→double//8바이트+4바이트
- long+int → long+long→long//8바이트+4바이트
- 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.(int:4바이트)
- 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차 변형 등을 할 경우
민, 형사상 법적 조치 등 저작권법에 의거하여 처벌 받을 수 있습니다."
'[JAVA] > 02.연산자' 카테고리의 다른 글
06. 이항연산자_ 논리연산자 (0) | 2022.04.12 |
---|---|
05. 이항연산자_비교연산자,문자열비교연산자 (0) | 2022.04.12 |
04. 형변환 연산자, 반올림 (0) | 2022.04.12 |
02. 단항연산자 (논리부정,전위,후위) (0) | 2022.04.12 |
01. 연산자의 우선순위(표) (0) | 2022.04.12 |