public class TypeConversion {
public static void main(String[] args) {
// TODO Auto-generated method stub
byte b = 127;
int i = 100;
System.out.println(b+i); // 결과 : 227
System.out.println(10/4); // 결과 : 2
System.out.println(10.0-4); // 결과 : 6.0
System.out.println((char)0x12340041); // 결과 : A
System.out.println((byte)(b+i)); // 결과 : -29
System.out.println((int)2.9 + 1.8); // 결과 : 3.8
System.out.println((int)(2.9 + 1.8)); // 결과 : 4
System.out.println((int)2.9 + (int)1.8); // 결과 : 3
}
}
[위에 코드를 직접 쳐보고 결과가 어떻게 나오는지 직접 경험하는 것을 추천한다.]
[위 사진 한장으로 요약할 수 있다]
연산이란 ? 주어진 식을 계산하여 결과를 얻어내는 과정
증감, 산술, 시프트 연산자 외에 연산자들은 모두 Bool값(true, false)을 return 한다. >
위에 설명을 밑에 사진 한장으로 정리하자면
사칙연산을 다루는 연산자로, 가장 기본적이면서도 가장 많이 사용되는 연산자
System.out.println(39/10); // 39 / 10의 결과 : 3
System.out.println(39%10); // 39 % 10의 결과 : 9
// (/) 연산자를 사용하면 몫을 return하고
// (%) 연산자를 사용하면 나머지를 return 한다고 이해하자.
n % 2 == 1 // <--숫자를 2로 나누어서 나머지가 1이면 홀수다.
[산술연산자의 종류]
초 단위의 정수를 입력받고, 몇시간, 몇분, 몇초인지 출력하는 프로그램을 작성하라.
import java.util.Scanner;
public class ArithmeticOperator {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.print("정수를 입력하세요 : ");
int time = sc.nextInt(); // 정수 입력
int second = time % 60; // 60으로 나눈 나머지는 초
int minute = (time/60) % 60; // 60으로 나눈 몫을 다시 60으로 나눈 나머지는 분
int hour = (time/60) / 60; // 60으로 나눈 몫을 다시 60으로 나눈 몫은 시간
System.out.print(time + "초는 ");
System.out.print(hour + "시간, ");
System.out.print(minute + "분, ");
System.out.println(second + "초입니다. ");
sc.close();
}
}
결과 :
1증가 혹은 감소 시키는 연산자
어렵게 생각하지말고 다음 예제를 살펴봅시다...
public class test {
public static void main(String[] args) {
int num1 = 3, num2 = 3; // num1, num2 변수를 만들었음. 둘다 초기값은 3으로 동일
int result1, result2; // 결과값을 담을 변수임
result1 = num1++; // result1 변수에 후위연산으로 num1을 대입했음.
result2 = ++num2; // result2 변수에 전위연산으로 num2을 대입했음.
System.out.println("result1의 값 : " + result1);
System.out.println("result2의 값 : " + result2);
}
}
결과는 ?
그 이유는 앞에 붙으면 전위연산, 뒤에 붙으면 후위연산을 하기 때문이다.
교수님 설명 : 연산의 오른쪽 결과는 왼쪽 변수에 대입
착한 설명 : 변수에 값을 대입할 때 사용하는 이항 연산자, 결합방향은 오른쪽에서 왼쪽
int a = 1, b = 3;
a = b; // b 값을 a에 대입하여 a=3임. 오른쪽에서 왼쪽으로 결합됨.
a += b; // a = a + b와 같음, a=6, b는 3 그대로임.
[대입 연산자의 종류]
[비교 연산자의 종류]
논리 연산
논리 값으로 NOT, OR, AND, XOR 논리 연산. 논리 값을 내는 연산
[논리 연산자의 종류]
논리 연산이 어떻게 수행되는지 표로 이해하고 넘어가자
[동작의 결과를 보여주는 진리표]
(age>=20) && (age<30) //나이(age)가 20대인 경우 ('>='가 비교연산자,'&&'가 논리연산자)
(c >= 'A') && (c <= 'Z') //문자(c)가 대문자인 경우
조건식 ? (조건이 true일때 수행) : (조건이 false일때 수행)
삼항 연산자를 이용한 조건 연산 예제는 아래와 같다.
int a= 3, b=5;
system.out.println("두수의 차는 " + ((a>b)?(a-b):(b-a)) );
비트연산자 : 논리 연산자와 비슷하지만, 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자
먼저 일단 비트를 알아야 하는데 내가 아는 개념을 먼저 정리해보겠다..
아래 사진으로 설명하겠다.
그래서! 알파벳을 대응시키기로 했음. 그게 16진수임.
'0x5A' 를 8bit로 풀어서 표현해봅시다..
그러면 이것의 답은 ' 01011010 ' 이고
10진수로 변환 시,
결과값은 90임을 알 수 있음.
비트 연산의 종류는 다음과 같습니다.
이게 지금 무슨 이상한 소리인지 이해가 안가겠지만, 설명 해드리겠읍니다.
비교하는 값이 둘다 1이여야지만 참값(1)을 반환
int a = 5;
int b = 12;
System.out.println(a & b); // 변수 a와 b를 AND 연산한 결과 출력
// 결과 : 4
비교하는 값 중 하나라도 1이면 참값(1)을 반환
int a = 5;
int b = 12;
System.out.println(a | b); // 변수 a와 b를 OR 연산한 결과 출력
// 결과 : 13
비교하는 값이 서로 다르면 참값(1)을 반환
int a = 5;
int b = 12;
System.out.println(a ^ b); // 변수 a와 b를 XOR 연산한 결과 출력
// 결과 : 9
비트를 전부 반전시킨다 (비트 반전 연산자)
int a = 5;
System.out.println(~a); // 변수 a에 NOT 연산을 적용한 결과
// 결과 : -6
a 값은 0000 0101 입니다.
위 코드에서 ~a는 'a변수의 비트를 반전시켜라' 는 의미로, 반전시킨 결과값은 1111 1010 입니다.
이 때, 2진수에서 가장 왼쪽 비트가 1은 음수를 나타내는 것입니다.
따라서 1111 1010 은 음수를 나타내는 것임을 알 수 있습니다.
1111 1010은 10진수로 -6에 해당합니다. 그래서 결과값은 -6 입니다.
지정한 수만큼 비트를 왼쪽, 오른쪽으로 이동
5-1. << 연산자
이진수의 각자리를 왼쪽으로 N칸 밀고 제일 첫째자리는 0으로 채워주는 연산.
int a = 5;
System.out.println(a<<3); // '비트 각 자리를 왼쪽으로 3칸씩 옮겨라'
// 결과 : 40
'5 <<3' 즉, '비트를 왼쪽으로 3칸씩 옮겨라' 라는 의미로 결과는 40 이 나온다.
5-2. >> 연산자
이진수의 각자리를 오른쪽으로 N칸 밀고 제일 첫째자리는 0으로 채워주는 연산.
int a = 38;
System.out.println(a>>2); // '비트 각 자리를 오른쪽으로 2칸씩 옮겨라'
// 결과 : 9
'38 >> 2' 즉, '비트를 오른쪽으로 2칸씩 옮겨라' 라는 의미로 결과는 9가 나온다.
if, if-else, if-else if-else, switch-case
case 문의 값
import java.util.*;
public class CodeQuestion {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("어떤 음식 드릴까요? : ");
String order = sc.next();
int price = 0;
switch(order) {
case "곰탕":
case "순대국":
case "설렁탕":
price = 7000;
break;
case "피자":
case "햄버거":
price = 5000;
break;
case "김밥":
case "컵밥":
price = 3000;
break;
default:
price = 0;
break;
}
if(price == 0) {
System.out.println("그런 메뉴는 없습니다");
} else {
System.out.println(order + " 는(은) " + price + " 원 입니다.");
}
}
}
사진 출처 ( http://www.tcpschool.com/java/ )
비트 연산 ( https://vmpo.tistory.com/106 )