메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 java 프로그래밍

뇌를 자극하는 java 프로그래밍 질의응답 게시판입니다.

전에 메일로 질문 드렸던 연산자 질문과 답변 파일 올려둘께요 ^_^

2014-08-06

|

by 질문자

1094

// 질문

182 페이지



package operator;



public class LogicOperator
{
     public static void main(String args[])
     {
          int a = 3, b = 4, c = 3, d = 5;
    
          if((a == 2 | a == c) & !(c > d) & (1 == b ^ c != d))
              System.out.println("맞습니다.");
          else
              System.out.println("아닌데요.");
  
          System.out.println();
  
          System.out.println("(1 == b ^ c != d) = " + (1 == b ^ c != d));
  
          System.out.println("1 == b + " + (1 == b));
          System.out.println("b ^ c + " + (b ^ c));
          /*  
                4 = 100
             ^ 3 = 011
                7 = 111
          */
          System.out.println("c != d + " + (c != d));
     }
}






// 실행결과



맞습니다.



(1 == b ^ c != d) = true   // 이 라인 true 가 출력되는 이유를 모르겠습니다 ...
1 == b + false
b ^ c + 7
c != d + true











190 페이지



package operator;



public class ShiftOperator
{
     public static void main(String args[])
     {
          int num1 = 0xFFFFFFFE;  // 11111111 11111111 11111111 11111110
          int num2 = num1 << 30;  
          int num3 = num1 << 31;  
          int num4 = num1 << 32;  
          int num5 = num1 << 33;  
          int num6 = num1 << 34;  
  
          System.out.printf("%08X %n", num1);
          System.out.printf("%08X %n", num2);
          System.out.printf("%08X %n", num3);
          System.out.printf("%08X %n", num4);
          System.out.printf("%08X %n", num5);
          System.out.printf("%08X %n", num6);
     }
}







// 실행결과



FFFFFFFE
80000000
00000000
FFFFFFFE
FFFFFFFC
FFFFFFF8







주어진 비트수를 데이터의 구성 비트수로 나눈 나머지만큼의 이동만 일어납니다. 이 말의 의미좀 설명해주세요 잘 모르겠습니다 ...



실행결과도 이해가 안됩니다 ...






==> 답변 부분


안녕하세요, 김윤명입니다.



[첫번째 질문의 답]



^라는 연산자는 182 페이지 윗쪽 설명에 있듯이

두 피연산자 중 한 값이 true, 또 다른 값이 false이면 연산 결과가 true가 되고,

두 값이 모두 true이거나, 모두 false일 경우에는 연산 결과가 false가 됩니다.



그런데  (1 == b ^ c != d))라는 식에서는 1 == b의 결과가 false, c != d의 결과가 true입니다.

그러므로 전체 식의 결과는 true가 되는 것입니다.



[두번째 질문의 답]



"주어진 비트수를 데이터의 구성 비트수로 나눈 나머지만큼의 이동만 일어납니다. "라는 말의 뜻은

int 타입의 크기가 4바이트 즉 32비트이므로, 1, 2, 3 ... 31 비트만큼의 이동은 그대로 처리되지만

33 비트를 이동시키려고 하면 33%32의 결과값, 즉 1비트의 이동이 일어나고,

34 비트를 이동시키려고 하면 34%32의 결과값, 즉 2비트의 이동이 일어난다는 뜻입니다.

그리고 32 비트를 이동시키려고 하면 32%32의 결과값은 0이므로 전혀 이동이 일어나지 않습니다.



감사합니다.



김윤명
댓글 입력
자료실