티스토리 뷰
최 단 산 쉬 관 리 삼 대
3. 산술연산자
-->/ * % + -
생소한 기호
--> % : 나머지 값을 가지고 오는 연산자
5 / 2-->2 ... 1(나머지)
5.0/2 --> 2.5(자동 형변환)
5/2.0
8 % 5 --> 결과값은 3
몫 : 1 나머지 : 3
9 % 4 --> 결과값 1
몫 : 2 나머지 : 1
n % 3 --> [ 0 , 1 , 2]
4 % 3 ... 1
5 % 3 ... 1
6 % 3 ... 0
7 % 3 ... 1
8 % 3 ... 2
9 % 3 ... 0
n % 3 ... 0, 1, 2
n % 4 --> 4개중에 1개
n % 2 ... 그 나머지 값이 항상 0이라면 ... 그 n은 짝수다
n % 7 ... 그 나머지 값이 항상 0이라면 ... 그 n은 7의 배수다
package opex;
import javax.swing.JOptionPane;
public class Op3 {
public static void main(String[] args) {
System.out.println("9%4="+9%4);
}
}
# 실습
68초 --> 1분 8초
108초 --> 1분 48초
960초 --> 16분
[String ss = JOptionPane.showInputDialog("초입력");
int inSec=Integer.parseInt(ss);]
==> int inSec=Integer.parseInt(JOptionPane.showInputDialog("초입력"));
--대화상자 불러서 정수로 바꿔라-한줄 해결
--좀더 간단한 소스를 만들 수 있음
package opex;
import javax.swing.JOptionPane;
public class Op3 {
public static void main(String[] args) {
int inSec=Integer.parseInt(JOptionPane.showInputDialog("초입력"));
System.out.println("입력받은 값 :"+inSec+"초");
int si = inSec/(60*60);
int reminder = inSec%(60*60);
int bun= reminder/60;
int cho= inSec%60;
System.out.println(inSec+"초 : "+si+"시"+bun+"분"+cho+"초");
}
}
#실습(과제)
은행원이 손님한테 돈을 지급한다
이때 최소 화폐 매수를 계산해서 지급해보자
36000원 = 1000원짜리 36장을 줄 수도 있지만 ... 부피가 크다
1만원권 3장 오천원권 1장 천원권 1장
package opex;
import javax.swing.JOptionPane;
public class Op4장해니 {
public static void main(String[] args) {
int money= Integer.parseInt(JOptionPane.showInputDialog("금액입력"));
System.out.println("받은 금액 :" +money);
int oMan = money/50000;
int man = (money%50000)/10000;
int num=(money%50000)%10000;
int oChun=num/5000;
int chun=(num%5000)/1000;
int num2=(num%5000)%1000;
int oBack=num2/500;
int Back=(num2%500)/100;
System.out.println("******화폐금액******");
System.out.println(" 5 만원 권 :"+oMan+"장");
System.out.println(" 만원 권 :"+man+"장");
System.out.println(" 5 천원 권 :"+oChun+"장");
System.out.println(" 천원 권 :" + chun+"장");
System.out.println(" 5 백원 권 :"+oBack+"개");
System.out.println(" 백원 권 :"+Back+"개");
}
}
4. 쉬프트 연산자
최 단 산 쉬 관 리 삼 대
1) << : 좌쉬프트
2) >> : 우쉬프트
3) >>> : 우3쉬프트
1 << 3
20 << 2
대상체 방향 = 이동칸수
대상체의 비트값을 (좌, 우) 방향으로 (n)칸 이동시켜라
5 << 1 : 값을 증가시킨다.
#1. 1을 비트로 만들어 0000 0101
#2. 왼쪽으로 <<
#3. 비트를 1번 이동시켜 0 0000 101_
버림 빈칸 : 좌시프트 빈칸 무조건 0을 채워준다
0000 1010
(십진수 10)
-------------------------------------------------
>> : 오른쪽 값을 감소하는 쪽으로 이동시킨다
#1. 대상체를 비트로 만들고
#2. 오른쪽으로 비트를 민다
#3. 그런데 이때,
sign bit는 그대로 두고 옆에 있는 비트로 부터 밀어야 한다. (부호를 그대로 유지해야 공식이 성립한다)
#4. 빈칸이 두번째 부터 발생하게 된다.
#5. 이때 빈칸에 채울 비트는 무조건 0이 아니라.. sign bit의 모양대로 채워 넣어야 한다.
0010 1010
>>2
__ 00 1010 10 (잘못된 움직임)
(sign bit는 안민다)
0010 1010
>>2
0__ 0 1010 10 (sign bit는 밀리지 않는다)
빈칸은 sign bit값을 채워넣자
0__ 0 1010 10
00
=> 0000 1010 대상체 / (2의 칸수 승)
#3. >>> 쉬프트 3개짜리
- 빈칸이 생기면 우쉬프트 경우 sign bit를 복사하게 되어 있는데...
- 우3개짜리는 무조건 0으로 채운다
1001 0001 >>> 3
1_ __ 1001 0001
000 3개짜리 쉬프트라서 무조건 0으로 채우자!
1000 1001
package opex;
public class Op5 {
public static void main(String[] args) {
System.out.println(10<<0); //10 대상체 << 좌(칸)
System.out.println(10<<1); //20 대상체*(2의 칸수 승)
System.out.println(10<<2); //40
System.out.println(10<<3); //80 10*(2의 3승)
System.out.println(10<<4);
System.out.println(10<<5);
System.out.println(10<<6); //64
System.out.println(550>>1);
System.out.println(550>>2);
System.out.println(550>>3);
System.out.println(550>>4);
System.out.println(550>>5);
}
}
5. 관계 연산자
최 단 산 쉬 관 리 삼 대
10>3 : 참 --> true
--> 관계 연산자는 의문형으로 물어보기 ("자문자답하기")
10 > 3 10은 크다(greater than) :gt
8 < 5 8은 작다(less than) :lt
< > <= >= == != (instanceof)
package opex;
public class Op6 {
public static void main(String[] args) {
System.out.println(10<5);
// 10은 5보다 작니?
System.out.println(80>90);
// 80은 90보다 크니?
int num = 10;
int num2 = 20;
System.out.println(num != num2); //true
// num 은 num2와 같지 않다
System.out.println(num == num2); //false
// num은 num2와 같다
System.out.println( !(num != num2) ); // !true->false
// ( num은num2와 같지않다 )가 아니다
}
}
6. 논리연산자
최 단 산 쉬 관 리 삼 대
--> 논리연산자는 5가지가 있음
true : 1
false : 0
비트 논리(숫자) > 관계 논리(관계식)
<진리표>
|
|
비트 논리 |
(숫자) |
|
관계논리 |
(관계식) |
|
|
논리곱 AND |
논리합OR |
배타논리합 |
관계논리AND |
관계논리OR |
|
|
AND |
OR |
XOR |
&& |
|| |
A |
B |
& |
| |
^ |
|
|
0 |
0 |
0 |
0 |
0 |
|
|
1 |
0 |
0 |
1 |
1 |
|
|
0 |
1 |
0 |
1 |
1 |
|
|
1 |
1 |
1 |
1 |
0 |
|
|
-->배타 논리합 : 같을 때는 0
다를 때 1
-->진리표를 바탕으로
#1. 비트 논리
A & B A | B A ^ B
int num = 12;
int num2 = 6;
num 12 : 0000 1100
num2 6 : 0000 0110
num^num2(같을때0같지않을때 1) 0000 1010
num | num2(1이있으면 참 ) 0000 1110
num&num2(같은 숫자들만) 0000 0100
#2. 관계 논리
관계식 && 관계식 || 관계식
10<3 && 20==8 || 100>5 && 9>1
f f t t
※ 수학에서의 연산
1<= x <=9 한자리 양수
0<= x <=9 십진수 숫자
1. x는 0이상이어야 한다(true)
2. x는 9이하이어야 한다(true)
3. 두 조건이(#1, #2) 동시에 true일때만
십진수 숫자가 된다.
①조건 ②조건
0<=x 관계논리연산자 x<=9
※ || 연산자는 범위값을 설정할 수 없다.
0<=x || x<=9 ( 0<= x <=9 )
하나만 맞아도 true
둘다 틀리면 false
※ && 연산자는 ~부터 ~까지, 범위를 설정할 수 있다.
0<=x && x<=9 ( 0<= x <=9 )
둘다 맞아야 true
하나라도 틀리면 false
package opex;
import javax.swing.JOptionPane;
public class Op7 {
public static void main(String[] args) {
System.out.println(10<3 && 20==8 || 100>5 && 9>1);
int search = Integer.parseInt(JOptionPane.showInputDialog("십진수 숫자 판독"));
System.out.println(search+", 십진수 숫자여부(||) : "+ ( 0<=search || search<=9 ) );
System.out.println(search+", 십진수 숫자여부(&&) : "+ ( 0<=search && search<=9 ) );
}
}
7, 삼항 연산자
최 단 산 쉬 관 리 삼 대
삼항 연산자
==> ? :
op1 ? op2 : op3
op1이 참이니? 거짓이니?
-->참이 되면 op2의 값
-->거짓이 되면 op3의 값이 된다.
※ 양자택일 연산자
-> 참
-> 거짓
package opex;
import javax.swing.JOptionPane;
public class Op7 {
public static void main(String[] args) {
int num=Integer.parseInt(JOptionPane.showInputDialog("정수 입력"));
int num2=Integer.parseInt(JOptionPane.showInputDialog("정수 입력"));
System.out.println(num>num2?"앞 수가 크다":"뒷 수가 크다");
//60점 이상이면 합격, 그렇지 않으면 불합격
int score = Integer.parseInt(JOptionPane.showInputDialog("점수 입력"));
//String result =score야 너 60점 이상이니? "합격" or "불합격";
String result = score>=60 ? "합격" : "불합격";
System.out.println(result);
}
}
8. 대입연산자
최 단 산 쉬 관 리 삼 대
* 대입 연산자
1. 단순 대입
2. 복합 대입
+= *= /= <<= ...
num = 0;
num += 3 (num = num+3)
num += 2 (num = num+2) 연산한 결과를 다시 변수에 반영해라
num *= 3 --> num에는15라는 결과값
package opex;
public class Op8 {
public static void main(String[] args) {
int num = 10;
//num = 1.1;
num=(int)1.1;
//num=(double)1.1; --> 타입이 불일치해서 대입이 안된다
num /=2;
num +=5;
num *=3;
//num의 결과를 암산해보고 출력해서 맞춰보자
System.out.println(num);
}
}
'Programing > Java' 카테고리의 다른 글
Java1 - 09. ifelse 제어문 (0) | 2017.04.20 |
---|---|
Java1 - 08. If 제어문 (0) | 2017.04.18 |
Java1 - 06. 연산자 1(operator) (0) | 2017.04.14 |
Java1 - 05. Scanner 활용/ Dialoginput (0) | 2017.04.13 |
Java1 - 04. 형변환. scanner(입력문) (0) | 2017.04.12 |