package b_operation;
public class Operation_03 {
public static void main(String[] args) {
/*
1. 산술연ㅇ산자
- 사칙연산자 (+,-,*,/), 나머지연산자(%), 쉬프트연산자(<<,>>,>>>)
-두개의 피연산자를 취하는 이항연산자이다.
2. 사칙연산자 (+,-,*,/)
- 두 개의 피연산자 중 자료형의 표현범위가 큰 쪽에 맞춰서 형변환 후 연산을 수행한다.
ex) int + float -> float + float
- int형 (4byte)보다 크기가 작은 자료형간의 연산은 int형으로 형변환 후 연산을 수행한다.
ex) byte + short -> int + int로 바뀐다 (둘다 4byte보다 작으니까)
**주의! 정수형간의 나눗셈에서는 0으로 나누는 것은 금지되어있다.
*/
byte b1 = 80;
byte b2 = 100;
long lo1 = 642L;
long result1 = lo1 + b1; // long이랑 byte 니까 long이 더 크니까
System.out.println(result1);
int result2 = b1 + b2; // byte + byte 니까 int보다 작으니까 int로 바뀜
System.out.println(result2);
byte result3 = (byte)(b1+b2); //byte + byte 니까 int인데 byte에 대입해야하므로 cast연산자써줌
System.out.println(result3);
long lo2 = (long)60000*80000; //int + int 니까 int라 int
System.out.println(lo2); //overflow가 발생해서 505032704가 나온거임
//48억이 나오게하려면 어케??
//(long)60000*(long)80000해줄 필요없이 앞에것만 바꿔주면 long*int해주면 long되니까
//더 쉽게 60000L*80000도 되는데 보통 변수에 담긴걸로 계산하기때문에
//652 180 -76 480 8개
/*
3. 나머지 연산자 (%)
-왼쪽의 피연산자를 오른쪽의 피연산자로 나누고 난 나머지 값을 돌려주는 연산자
-boolean형을 제외한 기본자료형에 사용가능하다.
*/
//사용자가 정수값 두개를 줄거임 두개를 가지고 몫은 얼마고 ,나머지는 얼마인지 프로그램만들거임
int first = 50;
int second = 6;
int share = first/second;
System.out.println(share); //int는 소숫점가질수없으니까
int remain = first%second;
System.out.println(remain);
//10을 8로 나눈 몫은 1이고 나머지는 2이다.
System.out.println(first+"을 "+second+"로 나눈 몫은 "+share+"이고 나머지는 "+remain+"이다");
//int인 first를 "을"이라는 string과 더하면 first도 string이 된것
/*
4. 쉬프트 연산자 (<<, >>, >>>)
그래픽적인 요소를 옆으로 조금씩 이동시키는것. >>>은 그래픽에 사용됨
<<와 >>는 은행에서 사용한다. 저 두가지가 숫자가 클때 계산속도가 빠르다.
shift : 밀다 라는 의미
곱하기와 나눗셈의 연산속도가 매우 우수하여 사용한다.
정수형에만 사용가능하다
피연산자의 각자리 (2진수)를 오른쪽 또는 왼쪽으로 이동한다.
<< : x<<n => x*2^n (oberflow고려)
>> : x>>n => x/2^n (0에 수렴하기때문에 오버플로 고려하지않아도됨)
10<<2는 원래 int가 되지만 byte라 치면
10을 2진수로 00001010
10<<3 10을 왼족으로 세칸
01010000 은 10*2^3
왼<<연산은 무한히 곱해지다보면 오버플로우 발생함
10<<11은 8칸가면 제자리니까 즉 10*2^11=10*2^8*2^3이고 2^8은 제자리니까 다시 10*2^3
10>>2 00000010 은 10/2^2
나눌때(오른>>연산)는 0에 수렴하게됨
*/
int i3 = 10;
System.out.println(i3 << 3);
System.out.println(i3 >> 10); //10/2^10이됨
System.out.println(i3<<35);//결국 3칸 이동한거임 왜? int는 32bit니까 32칸
}
}
'학원수업_basicJAVA > 2. 연산자' 카테고리의 다른 글
201012 Operation_04 (0) | 2020.10.12 |
---|---|
201012 Operation_3(2) (0) | 2020.10.12 |
201008 Operation_02 (0) | 2020.10.08 |
201007 Operation_01 (0) | 2020.10.07 |