ArithmeticOperator

ZiSoOm·2021년 5월 26일
0

기초자바

목록 보기
2/15
  • 대입연산자 : =
  • 산술연산자 : +, - , *, /, %(나머지)
  • 복합 연산자 : +=, -=, *=, /=, %= (산술연산자&대입연산자)
  • 증감 연산자 : ++, -- (1만큼 증가, 감소)

📌산술연산자 연습

int result = 10 + 20 -30 * 40 / 50 % 60; //연산 우선순위 : 수학과 동일

result = 10 / 3;  //나누기 : 3
System.out.println(result);
		
result = 10 % 3; //나머지 :1
System.out.println(result);

//5개의 산술연산자를 사용해 5개의 연산을 수행 후 출력해주세요.
result = 10 + 5;    //더하기 15
System.out.println(result);

result = 10 - 5;    //빼기 5
System.out.println(result);

result = 10 * 5;    //곱하기 50
System.out.println(result);

result = 10 / 5;    //나누기 2
System.out.println(result);

result = 10 % 5;    //나머지 0
System.out.println(result);

📌복합연산자 연습

result = result +3;
result += 3; //result와 3을 더하여 나온 값을 result에 대입함
result -= 5;
result *= 2;
System.out.println(result);

//아래의 문장을 복합연산자를 사용한 문장으로 만들어주세요.
		
//result = result + 10;
result += 10;

//result = result % 5;
result %= 5;

//result = result -2 *3;
result -= 2 * 3; //6을 빼는 것과 같음

📌증감연산자 연습

//증가연산자(++) : 변수의 값을 1 증가시킨다
//감소연산자(--) : 변수의 값을 1 감소시킨다
int i =0;

++i; //전위형 : 변수의 값을 읽어오기 전에 1 증가된다
i++; //후위형 : 변수의 값을 읽어온 후에 1 증가된다
--i;
i--;

i = 0;
System.out.println("++i = " + ++i);  // 먼저 증가시켜 1이 된 후 값을 읽겠다 :1출력
i = 0;
System.out.println("i++ = " + i++); //변수에 들어 있는 값을 먼저 읽어온 다음에 1을 증가시키겠다 :0출력
System.out.println(i); //0출력 후 i는 1증가되어 1이 된다 :1출력

📌주의사항

  1. 피연산자(연산의 대상)의 타입이 서로 같아야만 연산이 가능하다. (피연산자 2개 => 이항연산자, 3개 => 삼항연산자)
int _int = 10;
double _double = 3.14;
double result2 = (double)_int + _double; //(double)생략가능
System.out.println(result2); //작은 타입에서 큰타입으로  자동으로 형변환되어 계산 가능 ==> double +double이됨 :13.14 출력 

long _long = 100L;
_long = _int + _long;  //long 타입 형변환이 숨어 있음 ==> long + long
_int = _int + (int)_long;
  1. 연산의 최소 단위가 4byte가 되어야 연산이 가능하다.
byte _byte = 5;
short _short = 10;
_int = _byte + _short; //int보다 작은 타입은 int로 형변환된다 ==> 둘다 int로 형변환됨 int + int 가 됨 

char _char = 'a'; //안에 숫자가 들어있는데 표현만 문자로 표현됨
char _char2 = 'b';
_int = _char +_char2; // int보다 작은 타입이라 int로 형변환된다 ==> int +int가 됨
System.out.println(_int); //유니코드사용 ==>'a':97 'b':98 :195출력

📌오버플로우&언더플로우

표현범위를 벗어나는 값을 표현할 때 발생하는 현상

  • 오버플로우 : 가장 큰 값을 벗어나는 현상, 이 값을 벗어나면 가장 작은 값으로 돌아감
    (0 ~ 127 => 128이되면 -128이 됨)
  • 언더플로우 : 가장 작은 값을 벗어나는 현상, 이 값을 벗어나면 가장 큰 값으로 돌아감
    (0 ~ 127 => -129가 되면 127이 됨)
byte b =127;
b++;
System.out.println(b); //오버플로우 되어 128이 -128이 됨
b--;
System.out.println(b); //언더플로우되어 -129가 127이 됨

📌표현범위

  • 00000000
    왼쪽 가장 첫번째 자리 => - or + 표현
    나머지 7자리로 숫자 표현 2^7
  • 1byte : -2^7 ~ 2^7-1 : -128~127 (1) => 7
  • short : -2^15 ~ 2^15-1 (2) => 7 +8
  • int : -2^31 ~ 2^31-1 (4) => 7 + 8 *3
  • long : -2^63 ~ 2^63-1 (8) => 7 +8 *7
  • char : 0 ~ 2^16 (문자표현=> 마이너스 필요 없음)

📌표현범위 연습

다음을 한줄씩 계산해서 최종 결과값을 출력해주세요.

1. 123456 +654321
2. 1번의 결과 값 * 123456
3. 2번의 결과값 / 123456
4. 3번의 결과값 - 654321
5. 4번의 결과값  % 123456

연산을 잘 고려해서 타입을 결정해주는 것이 중요함

long result3 = 123456 + 654321;
result3 *= 123456; //96021237312
result3 /= 123456; //777777
result3 -= 654321; //123456
result3 %= 123456; //0
System.out.println(result3);

3개의 int형 변수를 선언 및 초기화 후 합계와 평균을 출력해주세요.

int num1 =15;
int num2 =34;
int num3 =49;
int sum = num1 +num2 + num3;
double avg = sum / 3.0; //평균은 소수점까지 => 타입 double형으로 정함, 피연산자 둘 중 하나는 double형으로 해줘야 함 ==> 3 -> 3.0
System.out.println("합계 : " + sum + "평균 : " + avg);

📌반올림

  • Math.round : 소수점 첫째자리에서 반올림
avg = Math.round(avg); 
System.out.println(avg); //33.0

//반올림 하기 전에 소수점의 자리를 이동시키고 반올림하면 보고싶은 자리까지 볼 수 있음
avg = Math.round(avg * 100) /100.0; // 뒤에  나누는 숫자를 10.0에서 100.0으로 바꿔주면 소수점 둘째자리까지 반올림됨
System.out.println(avg);

📌랜덤

Math.random() : 0.0 ~ 1.0미만의 수 발생시킴(0.9999...)

int random = (int)(Math.random() * 100) + 1; // 0 ~ 99 ==> +1 ==> 1 ~100까지의 수
System.out.println(random);

0개의 댓글

관련 채용 정보