티스토리 뷰

Programing/Java

Java1 - 07. 연산자 2

HNNN 2017. 4. 17. 16:01



최 단  쉬  관 리 삼 대


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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함