[Java] 3주차 과제
전체적으로는 java in Nutshell을 참고합니다.
공부내용
- 산술 연산자
- addition(+)
1) 두수를 더해준다
2) 두 string을 더해준다
3) 둘중 하나가 string인 경우, 나머지도 string으로 변경한 다음 더해준다.
System.out.println("Total: "+ 3 + 4); // prints "Total: 34", not 7!
from java in a Nutshell, 7th Edition
- substraction(-)
1) 앞수에서 뒷수를 빼줌
2) 뒤에서 나오지만 음수 unary operator로 쓰이기도 한다. - multiplication(*)
1) 두수를 곱해준다. - division(/)
1) 앞수에서 뒷수를 나눠준다.- 두수가 모두 integer이라면, 결과도 integer. 이때 나머지는 사라진다.
- 두수가 모두 float-point 값이라면, 결과는 float-point값이다.
- 분자가 정수이며, 분모에 해당하는 수가 0이라면,
int a = 1; int b = 0; System.out.println(a/b); //throw ArithmeticException()
- float-point값을 0으로 나눠주면 infinite 또는 NaN이 나온다.
float a = 0.0f; float b = 0; System.out.println(a/b) //print NaN float c = 0.1f; System.out.println(c/b) //print Infinity
- 결론 :
- 분모가 float-point 0 -> infinity 또는 NaN
- 분모가 int 0 -> ArithmeticException
- modulo(%)
1) 앞수 % 뒷수, 나머지를 반환
2) sign은 앞수(first operand)를 따라간다.
System.out.println(7%(-3)) // print 1 System.out.println(-7%3) // print -1
3) float-value의 case
- 일반적으로 int와 동일
System.out.println(4.3%2.1) // 대략 0.1 실제로는 0.09999999999999964이
- 일반적으로 int와 동일
- Unary minus(-)
- addition(+)
- 비트 연산자
- low-level operator이며, 개별의 bit들은 integer value를 만든다. 이것을 이해하기 위해서는 반드시, binary number에 대해서 이해해야 한다.
- float-value, boolean, array, object에는 사용할 수 없다.(특히, boolean의 경우에는 사용하면, 다른 결과가 나온다.(논리 연산자에서 설명))
- 두수가 long이면 결과도 long이다. 그 외에는 int이다.
- 연산기호
a) complement(~) : 모든 자리수를 반대로(1->0, 0->1)byte b = ~12; // ~00001100 => 11110011
two’s compliment : 양수인경우 : 일반적으로 10->2진법바꾸는 방식이 동일 음수인경우 : 보수를 취한후, 1을 더한값 ex)6 -> 0110 -> 1001+1 = 1010(2)
b) AND(&) : 둘다 1이면 1, 나머지는 0int a = 00001010 & 00000111; // 00000010 or 2;
c) OR(|) : 둘다 0이면 0, 나머지는 1
int a = 00001010 | 00000111; // 00001111 or 15;
d) XOR(^) : 같으면 0, 다르면 1
int a = 00001010 ^ 00000111; // 00001101 or 13;
f) Left shift(«) : 왼쪽 연산수를 오른쪽 연산수만큼 왼쪽으로 이동(가장높은 자리수는 왼쪽으로 이동하면 사라진다.)
int a = 10 << 1; // 00001010 -> 00010100; // -> 10 * 2; 사실 c << b인 경우는 c*2^b이다. int b = -1 << 2; -1(2진수로 변환) 00000001 -> 11111110+1 -> 11111111; left shift 2 한 값 : 11111100(10진수로 변환) 11111100-1 : 11111011 -> 00000100 : -4;
e) Signed right shift(») : 왼쪽 연산수를 오른쪽 연산수만큼 오른쪽으로 이동(가장 낮은 자리수는 오른쪽으로 이동하면 사라진다.) 일반적으로는 2n으로 나눈것과 같다. 오른쪽으로 이동할 때 가장 높은자리수의 값은 유지된다.(sign Extension) 그래서 왼쪽 연산수가 음수인 경우에는, 2n로 나누는 방법을 사용할 수 없다.
10 >> 1 // 00001010 -> 00000101 : 5(10/2) -50 >> 2 // 11001110 -> 11110011 = -13 이것은(50/4)와 다르다.
h) Unsigned right shift(»>) : 왼쪽 연산수를 오른쪽 연산수만큼 오른쪽으로 이동, 옮겨갈때는 무조건 0으로 (zero extension)
-1 >> 4 // 11111111 >> 4 : 00001111 = 15;
출처 : Java in nutshell
- 관계 연산자(=비교 연산자)
- Equals (==)
비교하는 두 값이 같으면 true, 다르면 false
primitive타입은 피연산자 값 그 자체가 값은 지 확인한다.
reference타입은 피연산자가 같은 object나 array를 참조하는지 확인한다. - Not Equals (!=)
==와는 정반대이다.
primitive는 값 자체가 다르면 true, 같으면 false
reference는 참조하는 객체나 array가 다르면 true, 같으면 false. - Less than (<) 오른쪽값이 왼쪽 값보다 크면 true, 작으면 false
- Less than or equal(<=) 오른쪽값이 왼쪽 값보다 크거나 같으면 true, 작으면 false
- Greater than (>) 오른쪽값이 왼쪽 값보다 크면 false, 작으면 true
- Greater than or equal(>=) 오른쪽값이 왼쪽 값보다 크거나 같으면 true, 작으면 false
- Equals (==)
비교하는 두 값이 같으면 true, 다르면 false
- 논리 연산자
- conditional and(&&) : 둘다 true 인경우에 true
- conditional or(||) : 둘중 하나만 true면 true
- Boolean not(!) :
현재 Boolean값을 반대로 바꿔준다.
Boolean a = true; a = !a; // then a = false;
- Boolean and(&) : Boolean과 같이 쓰면 &&과 같고, integer와 쓰면 bitwise로 된다.
- Boolean or(|) : Boolean과 같이 쓰면 ||과 같고, integer와 쓰면 bitwise로 된다.
- Boolean xor(^) : Boolean과 같이 쓰면 exclusive or이다. 즉 둘중 하나만 true여야 true이고 나머지는 false. integer와 쓰면 bitwise가 된다.
- instanceof
- object나 array가 요구되는 operator이다.
- primitive는 안된다.
- 사용법
실제 instance instanceof type "hi" instance of String; // true
- instance가 type과 같으면 true, 그렇지 않으면 false
- inatance가 null이면 무조건 false
- assignment(=) operator
- 정의 : 할당연산자(?)는 어떠한 값을 컴퓨터의 메모리에 저장하거나 할당하는 역할을 함
- 왼쪽값을 lvalue, 오른쪽 값을 rvalue라고 한다.
- 오른쪽 우선순위
a=b=c // a=(b=c)와 같다.
- assignment operator는 대수 연산기호(op)와 같이 사용이 가능하다.
// 일반적 룰 lvalue op= rvalue // a+=2;a=a+2 // a의 값에 2를 더해준다. // 주의 lvalue는 한번만 작동한다. a[i++] += 1은 a[i++] = a[i++] + 1과는 다르다.
- +=,-=,*=,/=,«= »= ..등으로 사용가능
- 화살표(->) 연산자
- lamdba나 stream를 위한 연산자이다.(이후설명)
- 3항 연산자
- if와 else를 한번에 처리할 수 있는 연산방법
- format
(chk)?a:b // chk가 true이면 return a, otherwise b int a = 2; int b = 3; int big = (a>b)?a:b; System.out.println(big) // 3;
- 예시
Boolean getBytelimitBySellerId = simpleServiceImpl().getBytelimitBySellerId(sellerId); Boolean getBytelimitByItemNo = simpleServiceImpl().getBytelmitByItemNo(no); Byte limitByte = (getBytelimitBySellerId>getBytelimitByItemNo)?getBytelimitBySellerId:getBytelmitByteItemNo;
-
연산자 우선 순위(predence and associativity)
우선순위 연산자 내용 1 (),[] 괄호,대괄호 2 -,~,++,– 부정, 증감 연산자 3 *,/,% -> +,- 곱셉, 나눗셈 -> 덧셈, 뺼샘 6 «,»,»> 비트 연산자 7 <,<=,>,>= 비교 연산자 8 ==,!= 비교 연산자 9 & -> ^ -> | 비트 연산자 앞부터 우선 10 && -> || 논리 연산자 앞부터 우선 11 ?: 조건 연산자(삼항) 12 =,+=,-=,… 그외 from https://toma0912.tistory.com/66
- (optional) Java 13. switch 연산자
- switch이용해서 값을 넣어주는 방식이다.
int code = 1; String ttt = switch(code) { case 1: yield "1"; case 2: yield "2"; default: yield "default"; }; System.out.prinlnt(ttt); // 1;
- switch이용해서 값을 넣어주는 방식이다.
Leave a comment