비트 연산자는 피연산자를 비트단위로 논리 연산한다. 피연산자를 이빈수로 표현했을 때의 각 자리를 아래의 규칙에 따라 수행 하면 피연산자 실수는 허용하지 않는다. 정수(문자포함)만 허용


| (OR연산자) : 피연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻는다, 그 외에는 0을 얻는다.

& (AND연산자) : 피연산자 양쪽이 모두 1 이어야만 1을 결과로 얻는다. 그외에는 0을 얻는다.

^ (XOR연산자) : 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다. 같을 때는 0을 얻는다. ( 1 ^ 1 = 0)


|(OR연산자)는 주로 특정 비트의 값을 변경할 때 사용한다. (0xAB | 0xF = 0xAF)

&(AND연산자)는 주로 특정 비트의 값을 뽑아 낼 때 사용한다.(0xAB & 0xF = 0xB)

^(XOR연산자)는 두 피연산자의 비트가 다를 때만 1이 된다. 그리고 같은 값으로 두고 XOR연산을 수행하면 원래의 값으로 돌아오는 특징이 있어서 간단한 암호화에 사용된다.



논리 연산자랑 다름 

||(OR결합) : 피연산자 중 어느 한 쪽만 true이면 true를 결과로 얻는다.

&&(AND결합) : 피연산자 양쪽 모두 true이어야 true를 결과로 얻는다.




조건 연산자 ? :

조건 연산자는 조건식? 식1 : 식2

true면 식1, false면 식2가 된다. 

조건연산자 쓰는 이유 if문보다 간략하다 조건 연산자를 중첩해서 사용하면 셋 이상 중의 하나를 결과로 얻을 수 있다. 

조건연산자를 여러 번 중첩하면 코드가 간략해지긴 하지만, 가독성이 떨어지므로 꼭 필요한 경우에 한 번 정도만 중첩하는 것이 좋다.

타입이 다른 경우 연산자처럼 산술 변환이 발생한다. double타입으로 통일

x = x + (mod <0.5? 0.0 : 0.5) 0이 0.0으로 변환되었다.


public class OperatorEx32 {
public static void main(String[] args) {
int x,y,z;
int absX,absY,absZ;
char signX, signY, signZ;

x=10;
y=-5;
z=0;

absX = x >= 0 ? x : -x; //x의 값이 음수이면, 양수로 만든다.
absY = y >= 0 ? y : -y;
absZ = z >= 0 ? z : -z;

signX = x > 0 ? '+' : (x==0 ? ' ' : '-');
signY = y > 0 ? '+' : (y==0 ? ' ' : '-');
signZ = z > 0 ? '+' : (z==0 ? ' ' : '-');

System.out.printf("x=%c%d%n", signX , absX);
System.out.printf("y=%c%d%n", signY , absY);
System.out.printf("z=%c%d%n", signZ , absZ);

}

x=+10

y=-5

z= 0



public class OperatorEx28 {
public static void main(String[] args) {
int x = 0xAB, y = 0xF;

System.out.printf("x = %#X \t\t%s%n", x, toBinaryString(x));
System.out.printf("y = %#X \t\t%s%n", y, toBinaryString(y));
System.out.printf("%#X ^ %#X = %#X %s%n", x, y, x ^ y, toBinaryString(x ^ y));
}


static String toBinaryString(int x) { //10진수 정수를 2진수로 변환하는 메서드
String zero = "0000000000000000000000000000";
String tmp = zero + Integer.toBinaryString(x);
return tmp.substring(tmp.length() - 32);
}
}

x = 0XAB 00000000000000000000000010101011

y = 0XF 00000000000000000000000000001111

0XAB ^ 0XF = 0XA4 00000000000000000000000010100100

+ Recent posts