1. 연산자
1.1 연산자와 피연산자
연산자 : 연산을 수행하는 기호 피연산자 : 연산자의 작업 대상( 변수, 상수, 리터럴, 수식)
연산자의 종류는 산술 연산자, 비교연산자, 논리 연산자, 대입 연산자, 기타 등이 있다.
- 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행한다.
- 단항 > 이항 > 삼항.
- 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.
1.5 산술 변환
타입 다른 경우, long + int → long + long → long float + int → float + float → float double + float → double + double → double
byte + short → int + int → int char + short → int + int → int
산술 변환이란? 연산 수행 직전에 발생하는 피연산자의 자동 형변환
- 두 피연산자의 타입을 같게 일치시킨다(보다 큰 타입으로 일치)
- 피연산자의 타입이 int 보다 작은 타입이면 int로 변환된다.
2. 단항 연산자
2.1 증감 연산자
증가 연산자(++) 피연산자의 갑을 1 증가시킨다. 감소 연산자(- -) 피연산자의 값을 1 감소시킨다.
전위형 : 값이 참조되기 전에 증가시킨다. ex) j = ++i; 후위형 : 값이 참조된 후에 증가시킨다. ex) j = i++
package chap03;
public class OperatorEx2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i=5, j=0;
j = i++;
System.out.println("j=i++; 실행 후, i=" + i+ ", j="+j);
i = 5;
j = 0;
j = ++i;
System.out.println("j=++i; 실행 후, i="+i+", j ="+j);
}
}
j=i++; 실행 후, i=6, j=5
j=++i; 실행 후, i=6, j =6
3. 산술 연산자
package chap03;
public class OperatorEx5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a = 10;
int b = 4;
System.out.printf("%d + %d = %d%n", a,b,a+b);
System.out.printf("%d - %d = %d%n", a,b,a-b);
System.out.printf("%d * %d = %d%n", a,b,a*b);
System.out.printf("%d / %d = %d%n", a,b,a/b);
System.out.printf("%d / %f = %f%n", a,(float)b,a/(float)b);
}
}
10 + 4 = 14
10 - 4 = 6
10 * 4 = 40
10 / 4 = 2
10 / 4.000000 = 2.500000
package chap03;
public class OperatorEx6 {
public static void main(String[] args) {
// TODO Auto-generated method stub
byte a = 10;
byte b = 20;
//byte c = a+b;
byte c = (byte)(a+b);
System.out.println(c);
}
}
//30
-> 이 경우, 바이트로 형 변환을 수행해줘야 한다.
-> 명시적인 형변환을 수행해야 하고, 오버플로우가 발생하지 않도록 만들어야 한다.
package chap03;
public class OperatorEx11 {
public static void main(String[] args) {
// TODO Auto-generated method stub
char a = 'a';
char d = 'd';
char zero = '0';
char two = '2';
System.out.printf("'%c' - '%c' = %d%n",d,a,d-a);
System.out.printf("'%c' - '%c'= %d%n",two,zero,two-zero);
System.out.printf("'%c'=%d%n",a,(int)a);
System.out.printf("'%c'=%d%n",d,(int)d);
System.out.printf("'%c'=%d%n",zero,(int)zero);
System.out.printf("'%c'=%d%n",two,(int)two);
}
}
'd' - 'a' = 3
'2' - '0'= 2
'a'=97
'd'=100
'0'=48
'2'=50
4. 비교 연산자
: 좌변 값이 크면 참 아니면 거짓 ≥ : 좌변 값이 크거나 같으면 참 아니면 거짓 == 두 값이 같으면, 참 아니면 거짓 != 두 값이 다르면, 참 아니면 거짓
5. 논리 연산자
5.1 논리 연산자
|| (OR 연산자) 피연산 자 중 어느 한쪽만 참이면 참으로 결과를 얻는다. && (AND 연산자) 피연산자 양쪽 모두 참이여야 참으로 결과를 얻는다.
문자 ch는 숫자('0'~'9')이다. → '0' < = ch && ch <= '9'
문자 ch는 대문자 또는 소문자이다. → ('a' <= ch && ch < = 'z') || ('A' <= ch && ch < = 'Z')
효율적인 연산 (short circuit evaluation)
한쪽만 참이어도 or 연산자는 참이다.
한쪽만 거짓이어도 and 연산자는 거짓이다.
5.2 비트 연산자
| (OR 연산자) 한쪽의 값이 1이면 1로 얻는다. & (AND 연산자) 둘다 1이어야 1로 얻는다. ^(XOR 연산자) 피연산자의 값이 서로 다를 떄만 1을 결과로 얻는다.
package chap03;
public class OperatorEx30 {
static String toBinaryString(int x) {
// TODO Auto-generated method stub
String zero = "00000000000000000000000000000000";
String tmp = zero + Integer.toBinaryString(x);
return tmp.substring(tmp.length()-32);
}
public static void main(String[] args) {
int dec = 8;
System.out.printf("%d >> %d = %4d \t%s%n",dec,0,dec >>0,toBinaryString(dec >> 0));
System.out.printf("%d >> %d = %4d \t%s%n",dec,1,dec >>1,toBinaryString(dec >> 1));
System.out.printf("%d >> %d = %4d \t%s%n",dec,2,dec >>2,toBinaryString(dec >> 2));
System.out.printf("%d >> %d = %4d \t%s%n",dec,0,dec <<0,toBinaryString(dec << 0));
System.out.printf("%d >> %d = %4d \t%s%n",dec,1,dec <<1,toBinaryString(dec << 1));
System.out.printf("%d >> %d = %4d \t%s%n",dec,2,dec <<2,toBinaryString(dec << 2));
System.out.printf("%d >> %2d = %4d \t%s%n",dec,0,dec >>0,toBinaryString(dec >> 0));
System.out.printf("%d >> %2d = %4d \t%s%n",dec,32,dec >>32,toBinaryString(dec >> 32));
}
}
8 >> 0 = 8 00000000000000000000000000001000
8 >> 1 = 4 00000000000000000000000000000100
8 >> 2 = 2 00000000000000000000000000000010
8 >> 0 = 8 00000000000000000000000000001000
8 >> 1 = 16 00000000000000000000000000010000
8 >> 2 = 32 00000000000000000000000000100000
8 >> 0 = 8 00000000000000000000000000001000
8 >> 32 = 8 00000000000000000000000000001000
package chap03;
public class OperatorEx31 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int dec = 1234;
int hex = 0xABCD;
int mask = 0xF;
System.out.printf("hex=%X%n",hex);
System.out.printf("%X%n",hex & mask);
hex = hex >> 4;
System.out.printf("%X%n", hex & mask);
hex = hex >> 4;
System.out.printf("%X%n", hex & mask);
hex = hex >> 4;
System.out.printf("%X%n", hex & mask);
}
}
hex=ABCD
D
C
B
A
6. 그 외의 연산자
6.1 조건 연산자 ? :
조건식 ? 식 1 : 식2
result = (x>y) ? x : y;
package chap03;
public class OperatorEx32 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int x,y,z;
int absX, absY, absZ;
char signX, signY, signZ;
x = 10;
y = -5;
z = 0;
absX = x>=0 ? 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
'Develope_Web&App > 01_Java & JavaFX' 카테고리의 다른 글
[java] 예외처리 (0) | 2021.01.27 |
---|---|
[Java] Chap04 조건문과 반복문 (0) | 2021.01.27 |
[Java] chap 02. 변수 (0) | 2021.01.26 |
객체지향 디자인패턴2 (0) | 2020.12.26 |
객체지향 디자인 패턴 (0) | 2020.12.26 |