-
문자열 마무리 / 삼항 연산자 / 비트 단위 부정 연산자프로그래밍/JAVA 자바 2021. 7. 5.반응형
문자열과 숫자 더할때 조심 할 것
package ex0705; public class Ex02_String { public static void main(String[] args) { String s; s = "korea" + 9 + 3; System.out.println(s); s = 9 + 3 + "korea"; System.out.println(s); s = 'A' + "korea" + 15; System.out.println(s); s = '0' + 10 + "korea"; System.out.println(s); s = 'A' + 5 + "korea"; System.out.println(s); } } //korea93, 12korea, Akorea15, 58korea, 70korea
결과값이 제각각 다른 점을 확인.
금액 입력 받으면 지폐 권수로 나누기
package ex0705; import java.util.Scanner; //금액 입력 받아서 지폐 권수로 나누기 public class Ex05_number3 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a; System.out.print("금액 입력 : "); a = sc.nextInt(); System.out.println("5만원권 : " + (a/50000)); System.out.println("1만원권 : " + (a%50000/10000)); System.out.println("5천원권 : " + (a%10000/5000)); System.out.println("1천원권 : " + (a%5000/1000)); System.out.println("500원권 : " + (a%1000/500)); System.out.println("100원권 : " + (a%500/100)); System.out.println("50원권 : " + (a%100/50)); System.out.println("10원권 : " + (a%50/10)); System.out.println("5원권 : " + (a%10/5)); System.out.println("1원권 : " + (a%5)); sc.close(); } }
실행 결과 =
금액 입력 : 5000000
5만원권 : 100
1만원권 : 0
5천원권 : 0
1천원권 : 0
500원권 : 0
100원권 : 0
50원권 : 0
10원권 : 0
5원권 : 0
1원권 : 0처음에는 5만으로 나눠 주다가 이후에는 나머지 연산자 + 필요한 금액 만큼 나눠주는게 포인트
마지막에는 나머지만 구해주면 된다.
증감 연산자
public class Ex05_Operator { public static void main(String[] args) { int a, b; System.out.println("a 초기값 : 10"); a=10; b=++a; System.out.println(a+","+b); a=10; b=a++; System.out.println(a+","+b); a=10; b=--a; System.out.println(a+","+b); a=10; b=a--; System.out.println(a+","+b); a=0; b=a---a; // a- --a System.out.println(a+ "," + b); } }
결과 =
a 초기값 : 10
11,11
11,10
9,9
9,10
-1,1마지막 부분은 a---a 헷갈릴 수 있는데
a 빼기 --a 이다.
=(a) - (--a)
=(10) - (9)
= 1
And / Or 관련 내용
public class Ex08_Logical { public static void main(String[] args) { int a; boolean b1,b2; a = 10; b1 = false; b2 = a>20 && (b1=true); //단축연산 : &&연산 앞에서 앞부분이 거짓이면 뒷부분 연산 안함. System.out.println(b1 + "," + b2); a = 10; b1 = false; b2 = a<20 || (b1=true); //단축연산 : ||연산 앞에서 앞부분이 참이면 뒷부분 연산 안함. System.out.println(b1 + "," + b2); } }
단축연산 기억하기 !
단축연산과 증감 연산자
public class Ex09_Logical { public static void main(String[] args) { int a,b; boolean c; a=20; b=20; System.out.println(a+","+b); a=20; b=20; c=++a>20 && b++>20; System.out.println(a+","+b+","+c); a=20; b=20; c=++a>20 || b++>20; System.out.println(a+","+b+","+c); a=20; b=20; c=a++>20 && ++b>20; System.out.println(a+","+b+","+c); //++붙어 있으면 ++ 먼저 계산한다 만약 b가 먼저 있으면 b랑 먼저 비교해서 true false 반환하고 나서 ++ 해준다. } }
결과값 =
20,20
21,21,false
21,20,true
21,20,false마지막 구문을 예를 들어보면 a++ > 20 && ++b > 20; 여기서 a++이 ++이 뒤에 있으니까
a랑 20이랑 먼저 비교를 하는거임 (20 > 20) 이렇게 되어버림 그러면 fales를 반환하고
++는 그제서야 a에 붙어서 21이 된다.
앞에서 a는 21이 되고 false를 반환 해버렸으니까 뒤에는 계산을 아예 안한다.
&& 구문은 둘다 참이여야 하는데 이미 앞에서 false를 반환 했기 때문에 뒤까지 진행도 안한다.
그러니까 뒤에 b는 ++자체도 적용이 안된것이다.
결론은 a= 21 / b =20 / false를 반환한다.
비트 단위 부정 연산자
public class Ex10_Bit { public static void main(String[] args) { int a = 12; int b = 6; int c; c = ~b; System.out.println("~6:"+c); c=a&b; // 1100 & 0110 = 0100 System.out.println(c); c=a|b; // 1100 & 0110 = 1110 System.out.println(c); c=a^b; // 1100 & 0110 = 10100 System.out.println(c); // 비트단위 연산으로 홀수 짝수 구분하기 (%2로 나눠서 구하는건 속도가 느림) a=16; b = a & 1; //1이면 홀수, 0이면 짝수 System.out.println(b); } }
^의 의미는 0+0 = 0 / 0+1=1 / 1+0=1 / 1+1=0 이 된다.
암호화 할때 주로 사용되는 논리라고 한다.
2진수로 바꿔서 0과 1을 바꿔 버리는 개념
이걸 이용하면 홀수 짝수 구하기도 쉽다.
물론 % 나머지를 이용해서 2로 나눠서 나머지가 0이면 짝수이고 아니면 홀수 이지만 이건 속도가 느리다.
b = 16;
b = a & 1; 했을때 b의 값이 1이 나오면 홀수다.
비트 단위 이동 연산자
public class Ex12_bit { public static void main(String[] args) { int a; a = 12 << 3; System.out.println(a); a = 12 >> 3; System.out.println(a); a = -32 >> 3; // 산술적 shift 연산자 부호로 채움 System.out.println(a); a = -32 >>> 3; // 논리적 shift 연산자 0으로 채움 System.out.println(a); int x,y,z; boolean b; } }
2진수로 바꿔서 자리수를 옮길때 사용한다.
이것도 암호화의 기초 개념이라고 한다.
public class Ex13_Bit { public static void main(String[] args) { int x,y,z; boolean b; x=y=z=1; b = (++x != 0) || (++y != 0) || (++z != 0); System.out.println(x+","+y+","+z+","+b); x=y=z=1; b = (++x != 0) | (++y != 0) | (++z != 0); //비트 단위 연산자는 단축 연산 안한다. 그래서 222 System.out.println(x+","+y+","+z+","+b); /* * 2,1,1,true * 2,2,2,true */ } }
비트 단위 연산자는 단축 연산을 안한다.
삼항 연산자
삼항 연산자는 if 같은 개념이다.
import java.util.Scanner; public class Ex16_op { //삼항 연산자 public static void main(String[] args) { Scanner sc = new Scanner(System.in); //정수 입력 받아 짝수 인지 판별 int n; String s; System.out.print("정수 입력"); n = sc.nextInt(); //s = n % 2 == 0 ? //"짝수" : "홀수"; 삼항 연산자 s = (n&1) == 1 ? "홀수" : "짝수"; //속도가 더 빠름 System.out.println(n + ":" + s); sc.close(); } }
삼항 연산자 기본 구조는
조건문 ? 참일때 반환값 : 거짓일때 반환값 의 구조이다.
(n&1)==1 ? "홀수" : "짝수"
n과1을 비트단위 연산했을때 값이 1이 나오면 ? (1이 나옴) 홀수를 변수에 대입 : (1이 아님) 짝수를 변수에 대입
삼항 연산자를 활용한 입력한 년도가 윤년인지 확인하는 코드도 만들 수 있다.
import java.util.Scanner; public class Ex19_question2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("년도 입력"); int year = sc.nextInt(); String ans; //ans = year % 4 == 0 ? (year % 100 == 0) ? (year % 400 == 0) ? "윤년" : "평년" : "윤년" : "평년"; ans = year % 4 ==0 && year % 100 !=0 || year % 400 == 0 ? "윤년" : "평년"; System.out.println(ans); sc.close(); } }
입력받은 문자의 아스키 코드 출력
import java.util.Scanner; public class Ex20_op { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 한 문자 입력 받아서 입력 받은 문자의 ascii 코드 출력 // A = 65 char s; System.out.print("한 문자 입력"); s = sc.next().charAt(0); System.out.println((int)s); sc.close(); } }
중요 포인트는
s = sc.next().charAt(0);
System.out.println((int)s);이 부분이다.
입력을 받는데 char 형태로 입력을 받고(입력한 문자의 맨 첫 앞 글자만 들어감)
출력할때 앞에 int를 붙여주면 입력한 문자의 아스키 숫자를 볼 수 있다.
반응형'프로그래밍 > JAVA 자바' 카테고리의 다른 글
자바 - while 문 (0) 2021.07.07 if 조건문 / switch문 (0) 2021.07.06 Java 입력문 Scanner / 진수 내용 / 주석 / 나머지 연산자 및 초를 입력 받아 시 분 초로 나타내기 (0) 2021.07.02 이클립스 프로젝트 생성 및 초기 세팅 (0) 2021.07.02 첫 교육 이클립스 환경 세팅 및 print문 수업 (0) 2021.07.01