정리 노트/쌍용 KDT_(자바 Spring)

23.02.02(목): 기본 입출력, 연산자(비트,논리,삼항...), 특수 문자 영문 이름

우주바다 2023. 2. 13. 19:05
728x90

오늘 배운 것
01. printf() 
02. Scanner 
03. 실수 자료형의 정밀도
04. 입출력 실습

05. 비트 단위 연산자 
06. 논리 연산자
07. 삼항 연산자 
08. 주요 특수문자 영문이름 



01. printf() 

print(), printf() 는 인자 없이 사용할 수 없다.

boolean, char, String은 %b, %c, %s 로 지정한다.

%h : 16진수 (hex)  

%o : 8진수 (oct)

 

%10d : 10진수 정수를 10자리 확보한 후 출력한다.

%010d: 10자리 중 빈 공간은 0으로 채운다.

 

%f : 기본 정밀도인 소수점 6자리까지 출력

%.2f: 소수점 2자리까지 출력(반올림)

%8.2f : 8자리 확보 후, 소수점 2자리까지, 비는 공간은 공백으로 출력.

           이 때, 데이터 길이보다 공간이 작아도 잘리지 않고 모두 출력된다.

 

-%d : 음수 부호는 형식 지정자 앞에 붙는다.

%d, -15 : 넘겨주는 값에만 음수 부호를 붙여도 된다.

 

 

실습 016

더보기
public class Test016{
	public static void main(String[] args){ 		
		
		//System.out.print();          <error>
		System.out.print("\n");        //개행 
		System.out.printf("%d + %d = %d\n",10,20,30);
		
		System.out.printf("abc\n");		
		System.out.printf("abc%n");		
		//System.out.printf();			   <error>

		System.out.printf("%10d\n",123);   //       123
		System.out.printf("%8d\n",123);    //     123
		System.out.printf("%010d\n",123);  //0000000123

		System.out.println(365);			//365
		System.out.println(+365);			//365
		System.out.println(-365);			//-365
		
		System.out.printf("%+d\n", 365);        //365
		System.out.printf("+%d\n", 365);        //365
		// System.out.printf("%-d\n", 365);   <runtime error>
		System.out.printf("-%d\n", 365);      // -365
		System.out.printf("%d\n", -365);      // -365

		// System.out.prinf("%d\n",'A');		<runtime error>
		System.out.printf("%c\n",'A');        // A
		//System.out.printf("%c\n",'ABCD');   <runtime error> 
		System.out.printf("%s\n","ABCD");     // ABCD 

		System.out.printf("%h\n", 24);		// hex. 16진수 
		System.out.printf("%o\n", 24);		// oct. 8진수 

		System.out.printf("%b\n" ,true);
		System.out.printf("%b\n" ,false);

		System.out.printf("%f\n", 123.23);    //123.230000
		System.out.printf("%.2f\n", 123.23);  //123.23 
		System.out.printf("%.2f\n", 123.235); //123.24 (반올림)
		
		// 전체 공간 8 확보 ,소수점 2번째 자리까지(앞 두자리가 빈다)
		System.out.printf("%8.2f\n", 123.236); //  123.24
		// 전체 공간이 데이터보다 작으면 알아서 늘어나며 출력.(잘리지 않음) 
		System.out.printf("%2.2f\n", 123.236); //123.24
	}
}

02. Scanner 


 - 단락 문자 패턴을 사용하여 입력값을 토큰에 따라 분할.
 - 디폴트로 사용되는 단락 문자는 공백(개행)이다.
 - 값 작성 후, 토큰은 next() 메소드 사용
 - 다른 자료형의 값으로 변환할 수 있다.

 * 토큰: 데이터를 구분자를 기준으로 잘라냄 
 * BufferedReader 에 비해 사용하기 간단하지만, 
   기능을 많이 가지고 있어 성능은 낮다.(다기능의 단점. 속도 느림)
   - 번역기도 내장되어있어 생략 가능. 인스턴스 생성구문이 매우 짧다.


 * BufferedReader는 스캐너가 라인 하나를 다 읽는다면
   Scanner는 공백을 디폴트로 잘라 가져온다. 
   그래서 전자는 br.readLine() , 후자는 sc.next() 라는 이름.

 

실습 017

 java.util.Scanner sc = new java.util.Scanner(System.in); 
 상단 import대신 이렇게 작성 가능하지만 하지 않음.
 한 번만 import 하면 되는데 계속 명시해줘야하므로.

더보기
import java.util.Scanner;
public class Test017{
	public static void main(String[] args) {
		/*--------- ① 주요 변수 선언 ---------*/   
		// Scanner 클래스 기반의 인스턴스 생성.		
		Scanner sc = new Scanner(System.in);
		String name;
		int kor, eng, mat; 

		/*---------- ② 연산 및 처리 ----------*/  
		System.out.print("이름 입력: ");
		name = sc.next();
		System.out.print("국어 점수 입력: ");
		// cf. kor = Integer.parseInt.(br.readLine()); // (BufferedReader)
		// kor = Integer.parseInt(sc.next());  이것도 가능하지만
		kor = sc.nextInt(); // 내장 기능으로 간단하게 작성가능.

		System.out.print("영어 점수 입력: ");
		eng = sc.nextInt();
		System.out.print("수학 점수 입력: ");
		mat = sc.nextInt();
		/*--------- ③ 결과 출력 ------------*/ 
		System.out.println();
		System.out.println(">> 이름: " + name);
		System.out.println(">> 총점: " + (kor + eng + mat));
	}
}

실습 018

기본 단락 문자가 공백이므로, 한 번에 입력값 받기.

더보기
import java.util.Scanner;
public class Test018{
	public static void main(String[] args){
		/*--------- ① 주요 변수 선언 ---------*/
		Scanner sc = new Scanner(System.in);
		String name;
		int kor, eng, mat, tot;
		/*---------- ② 연산 및 처리 ----------*/
		System.out.print("이름, 국어, 영어, 수학점수를 공백 구분하여 입력: ");
		name = sc.next();
		kor = sc.nextInt();
		eng = sc.nextInt();
		mat = sc.nextInt();
		tot = kor + eng + mat;
		/*----------- ③ 결과 출력 ------------*/ 
		System.out.println();
		System.out.println(">> 이름: " + name);
		System.out.println(">> 총점: " + tot);
	}
}

 

 

실습 019

\(역슬러시) 출력은 형식 지정자 %를 printf에서 출력할 때

%%로 입력한 것과 마찬가지로 \\ 로 작성한다.

// System.out.println("\"); 세미콜론까지 색상변하면서 오류
System.out.println("\\");    //  역슬러시 1개 출력.


 역슬러시는 문자열 내에서 형식 지정자처럼 쓰인다.
 *Delimiter : 구분자.
  .useDelimiter()  : 인자로 구분자 형식을 받는다.

더보기
import java.util.Scanner; 
public class Test019{
	public static void main(String[] args){
		/*--------- ① 주요 변수 선언 ---------*/
		Scanner sc = new Scanner(System.in);
		String name;
		int kor, eng, mat, tot;
		/*---------- ② 연산 및 처리 ----------*/
		System.out.print("이름, 국어, 영어, 수학점수를 『,』로 구분하여 입력: ");	
		sc = new Scanner(sc.next()).useDelimiter("\\s*,\\s*"); 
		//              -----------              ------------
		//             "우주,90,80,70"      임의의 모든 문자열(\s*) 사이의 ,
		name = sc.next();
		kor = sc.nextInt();
		eng = sc.nextInt();
		mat = sc.nextInt();
		tot = kor + eng + mat ;
		/*----------- ③ 결과 출력 ------------*/ 
		System.out.println("\n>> 이름: " + name);
		System.out.println(">> 총점: " + tot);
	}
}

03. 실수 자료형의 정밀도

  : 실수형 데이터 타입의 정밀도 테스트.
 단순 값 저장에서 float는 괜찮지만 연산에서는 문제 될 수 있으므로 double 권장.

 

실습 020

public class Test020{
	public static void main(String[] args){
		float a = 0;
		double b = 0;
		for(int i =1; i<= 100000; i++ )
		{
			a+= 100000; // a를 100000 만큼 증가
			b+= 100000; // b를 100000 만큼 증가
		}
		System.out.println("float a : " + (a/100000));
         	// float a : 99996.055
		System.out.println("double b : " + (b/100000)); 
        	// double b : 100000.0
	}
}

04. 입출력 실습

% 형식지정자를 출력할 때는 %%로 입력

 

실습 021

더보기
/*======================= 02/2(목) =========================
  임의의 정수를 사용자 입력 받고, 사칙 연산 및 나머지 연산을 
  수행 후 결과를 출력하는 프로그램 구현.
 단, 입력은 BufferedReader를, 출력은 printf() 메소드를 사용.
 나눗셈 연산은 편의상 정수 기반으로 처리.(원래 double 권장)
* Modulus Operator : 나머지 연산자.
 ===========================================================*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Test021{
	public static void main(String[] args) throws IOException{
		/*--------- ① 주요 변수 선언 ---------*/		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int num1, num2;
		int plus, minus, multi, divid, modul;
		/*---------- ② 연산 및 처리 ----------*/
		System.out.print("첫 번째 정수 입력: ");
		num1 = Integer.parseInt(br.readLine()); 
		System.out.print("두 번째 정수 입력: ");
		num2 = Integer.parseInt(br.readLine()); 

		plus = num1 + num2;
		minus = num1 - num2;
		multi = num1 * num2;
		divid = num1 / num2;
		modul = num1 % num2;
		/*----------- ③ 결과 출력 ------------*/ 
		System.out.printf("\n====[결과]====\n");
		System.out.printf("%d + %d = %d\n", num1, num2, plus);
		System.out.printf("%d - %d = %d\n", num1, num2, minus);
		System.out.printf("%d * %d = %d\n", num1, num2, multi);
		System.out.printf("%d / %d = %d\n", num1, num2, divid);
		System.out.printf("%d %% %d = %d\n", num1, num2, modul); // 퍼센트 기호를 %%로 수정
		System.out.printf("==============\n");                                                                         	  	
		/* 출력 결과 =========================
			첫 번째 정수 입력: 10
			두 번째 정수 입력: 2
			====[결과]====
			 10 + 2 = 12
			 10 - 2 = 8
			 10 * 2 = 20
			 10 / 2 = 5
			 10 % 2 = 0
			계속하려면 아무 키나 누르십시오 . . .   
		==========================================*/
		/*  오류 ("%d % %d 로 작성했을 때)  ===================================================
			첫 번째 정수 입력: 10
			두 번째 정수 입력: 2
			====[결과]====
			Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = ' ' ... 생략
		================================================================================================*/
	}
}

05. 비트 단위 연산자

 

실습 022

~   (bit not , 틸드) : 비트열 반전(부호가 바뀐 후 1 작아진다.)

더보기
public class Test022{
	public static void main(String[] args){
		int a = 10, b = -10;
		System.out.printf("~a: %d\n", ~a);//bit not  ~a: -11
		/*-----------------------------
		a = 10 → 00001010
			 ↓ ~a
		11110101  →   -11	
		-------------------------------*/
		System.out.printf("~b: %d\n", ~b);//bit not  ~b: 9
		/*-----------------------------
		b = -10 →  ???   =  11110110 (음수10)
			   ↓		 ↓       ~b
		 양수10   00001010 	00001001 
			  ↓		  ↓
		          11110101 + 1    8 + 1   →   9
		          ↓
	   	 음수10	  11110110    
		-------------------------------*/
	}
}

 실습 023

& (앰퍼센드, bit and ) : 둘 다 참이어야 참.          
|  (버티컬바, bit or) : 둘 중 하나라도 참이면 참         

^ ( 서컴플렉스/카릿, bit exclusive or ): 배타적 논리합(서로 달라야 참) 

더보기
public class Test023{
	public static void main(String[] args)
    {
		int a = 13, b =7;
		int c , d, e;

		c = a & b; // bit and         
		d = a | b; // bit or           
		e = a ^ b; // bit exclusive or  

		System.out.printf("a & b = %d\n", c);
		System.out.printf("a | b = %d\n", d);
		System.out.printf("a ^ b = %d\n", e);

		/*
			a & b = 5
			a | b = 15
			a ^ b = 10
			계속하려면 아무 키나 누르십시오 . . .
		*/
	}
}

 실습 024

 xor  연산자 활용. 두 변수 값 바꾸기(swap) 

더보기
//xor 연산자 활용: 두 변수에 담긴 값 바꾸기(스왑) swap
public class Test024{
	public static void main(String[] args){	

		int x = 20, y= 23 ;
		int temp;   // 임시 저장 
		// 연산 처리 전 값 확인
		System.out.printf("x →  %d, y →  %d\n", x, y);
		/*  일반 연산 처리 ------------------------------*/
			 temp = 20;
			 x = y;
			 y = temp;
		/* 비트 연산 처리 (임시변수 필요 없음) ----------*/ 
			x = x^y;
			y = y^x;
			x = x^y; 	
		/*
			y = y^x;
			x = x^y;
			y = y^x; 
		*/
		System.out.printf("x →  %d, y →  %d\n", x, y); //결과 출력
	}
}

 


 실습 025

 << ,  >>, >>>  (비트 시프트 연산자) 
>> : 빈 공간을 양수면 0, 음수면 1로 채운다.
<<, >>> : 빈 공간을 0으로 채운다.
모든 연산자 중 가장 속도가 빠르다.

더보기
public class Test025{
	public static void main(String[] args){
		int x = 128;    // 00000000 00000000 00000000 10000000 
       	 	//참고: 실제 비트열은 공백이 없음. 편의상 표현
		System.out.printf("x << 3 : %d\n", x << 3);
		// 00000000 00000000 00000000 10000000    == 128 
		//				    ↓
		// 00000000 00000000 00000100 00000000    == 1024 == (128 * 8) == (128 * (2의3제곱))

		System.out.printf("x >> 3 : %d\n", x >> 3);
		// 00000000 00000000 00000000 10000000    == 128
		//				    ↓
		// 00000000 00000000 00000000 00010000    == 16 
		
		System.out.printf("x / 8 : %d\n", x / 8); // x / 8 = 16

		System.out.printf("x << 24 : %d\n", x << 24);
		// 00000000 00000000 00000000 10000000    == 128
		//				    ↓
		// 10000000 00000000 00000000 00000000    ==  -2147483648  
        	//(int 표현범위 최소값인 -21억 정도) 

		System.out.printf("x << 25 : %d\n", x << 25); 
       		 // 1일 것 같지만 0.
		System.out.printf("x << 26 : %d\n", x << 26); 
       		 // 계속 0... 넘어가다가, 다시 자기 자리로 가기 전까지는 잠복기 
		System.out.printf("x << 32 : %d\n", x << 32); 
        	// 128. ( int는 32비트니까 원래 값으로)
		System.out.printf("x << 64 : %d\n", x << 64); // 128. 

		/*--- 출력 결과 
			x << 3 : 1024       
			x >> 3 : 16
			x << 24 : -2147483648
			x << 25 : 0
			x << 26 : 0
			x << 32 : 128  
			x << 64 : 128
		*/
	}
}

06. 논리 연산자

2개 이상의 조건문에 무조건 포함되는 연산자.

public class Test026{
	public static void main(String[] args){
		boolean a = true, b = false; 
		System.out.printf("a && b : %b\n", (a && b)); 
		System.out.printf("a || b : %b\n", (a || b)); 
		System.out.printf("!a     : %b\n", !a);		   
		System.out.printf("!b     : %b\n", !b);		  	
		/*  	a && b : false
			a || b : true
			!a     : false
			!b     : true      */	
	}
}

07. 삼항 연산자(조건 연산자)

 

 피연산자    ?     피연산자     :    피연산자 

1항의 연산 결과가 true   →  2항을 수행 

:(조건 연산자 전체 구문이 2항으로 덮어씌워지는) 치환

1항의 연산 결과가 false  →  3항을 수행 (치환)

더보기
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;  // readLine 사용에는 IOException이 필수.

public class Test027{
	public static void main(String[] args) throws IOException{

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n;             // 입력값 정수
		String strResult;  // 홀수 짝수 판별 결과 
        
		// 연산 및 처리 --------------------------------		
		System.out.print("임의의 정수 입력: ");
		n = Integer.parseInt(br.readLine());
	    	strResult = (n % 2 == 0) ? "짝수" : "홀수"  ;     
        	// bool 결과에 따라 치환된 값을 변수에 담는다.
		// strResult = (n % 2 != 0) ? "홀수" : "짝수" ;  // 다른 표현
        
		// 결과 출력 -----------------------------------
		System.out.println("\n====[판별 결과]====\n");
		System.out.printf("%d → %s\n\n", n , strResult);
		/*  임의의 정수 입력: 8

			====[판별 결과]====

			8 → 짝수

			계속하려면 아무 키나 누르십시오 . . .  */
	}
}
/*----------------[꼼꼼하게 과정 보기]----------------------

 쉬워보이더라도 치환 과정에 대해 자세하고 정확하게 이해해야 
 코드가 길어지고, 조건 연산이 중첩되었을 때 헷갈리지 않음.

					 ex) n이 39라면..
                     
strResult = (n % 2 == 0) ? "짝수" : "홀수";
strResult = (39 % 2 == 0) ? "짝수" : "홀수";
strResult = (1 == 0 ) ? "짝수" : "홀수";
strResult = (false) ? "짝수" : "홀수";
strResult = "홀수";
------------------------------------------------------------*/

08. 주요 특수문자 영문이름 

 

 `  →  Grave    (비격식 Backtick)
 ~  →  Tilde
 !  →  Exclamation Point
 @  →  At Sign , Commercial Sign
 #  →  Crosshatch, Sharp, Pound Sing
 $  →  Dollar Sign
 %  →  Percent Sign
 ^  →  Circumflex
 &  →  Ampersand
 *  →  Asterisk   
 (  →  Left Parenthesis
 )  →  Right Parenthesis
 () →  Parentheses              // 복수형 -ses              
 -  →  Hyphen, Dash, Minus Sign
 _  →  Underscore, Underline, Underbar 
 =  →  Equal Sign
 +  →  Plus Sing
 |  →  Vertical Bar            // 글꼴에 영향 받음  
 [  →  Left Bracket
 ]  →  Right Bracket
 [] →  Brackets        *브라켓(권장) / 각괄호 
 {  →  Left Brace
  } →  Right Brace
 {} →  Brace          //복수 형태로 사용 안 함     *브레이스
 ;  →  Semicolon
 :  →  Colon
 "  →  Qutation Mark     // (더블)쿼테이션 (원래 얘만 쿼테이션인데)
 '  →  Apostrophe  // 싱글 쿼테이션 / 어포스트로피 (관습적으로 싱글 쿼테이션이라고 함)
 ,  →  Comma
 .  →  Dot, Period, Full Stop  
 <  →  Less Than Sign, Left Angle Bracket  
 >  →  Greater Than Sign, Right Angle Bracket
 <> →  Angle Brackets     // 앵글 브라켓, 레스댄 사인, 그레이터댄 사인 
 /  →  Slash, Virgule
 \  →  Back Slash, Won Sign      // 글꼴에 영향 받음 
 ?  →  Question Mark             물음표 / 퀘스쳔 마크 
    →  Space  공백  / 스페이스 

728x90
반응형