전에 메일로 질문 드렸던 연산자 질문과 답변 파일 올려둘께요 ^_^
// 질문
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이므로 전혀 이동이 일어나지 않습니다.
감사합니다.
김윤명