dev.lang/Java

190612

seuhyang 2019. 6. 12. 16:47

문자 리터럴 , 문자열 리터럴 예제

package day2_190612;

public class StringEx {
	public static void main(String[] args) {
		String name = "Ja" + "va";
		String str = name + 8.0;
		
		System.out.println(name);
		System.out.println(str);
		System.out.println(7 + " ");
		System.out.println(" " + 7);
		System.out.println(7 + "");
		System.out.println("" + 7);
		System.out.println("" + "");
		System.out.println(7 + 7 + ""); // 7 + 7 >  14 + "" > 14
		System.out.println("" + 7 + 7); // "" + 7 > "7" + 7 > 77
		System.out.println("" + (7 + 7));// 위와 순서는 같은 식이지만 괄호 가 추가되어서 우선순위가 바뀌므로 결과가 다르다
										 // (7 + 7) > "" + 14 > 14
		
		System.out.println("\n"+"over"); // 예제 이외
		System.out.println(7 + 7 + "7"); // 7 + 7 > 14 + "7" > 147
		System.out.println("7" + 7 + 7); // "7"+ 7 > "77" + 7 > 777
	}
}

형식화된 출력 printf 예제

PrintfEx1.java

 

package day2_190612;

public class PrintfEx1 {
	public static void main(String[] args) {
		byte b  = 1;
		short s = 2;
		char c = 'A';
		
		int finger = 10;
		long big = 100_000_000_000L; // long big = 100000000000L;
		long hex = 0xFFFF_FFFF_FFFF_FFFFL; // 16진수 최대값
		
		int octNum = 010;		// 8진수 10, 10진수로는 8
		int hexNum = 0x10;		// 16진수 10, 10진수로는 16
		int binNum = 0b10;		// 2진수 10, 10진수로는 2
		
		System.out.printf("b=%d%n", b); // printf 에서 처음에는 반드시 문자열이 와야 하며, 빈칸은 안됨.  
		System.out.printf("s=%d%n", s); // 구분자, 최소한의 문자열 1개, 그 다음에 추가를 해주는 형식,
										//% > 지시자, 예)c를 %c에 대입하겠다. %n > \n 개행 , 
		System.out.printf("c=%c, %d %n", c, (int)c); //(int)c > 형변환 > 문자형을 정수형으로 변환 시켜서 대입
		System.out.printf("finger = [%5d] %n", finger); //%5d > 앞에서부터 5자리를 맞춤
		System.out.printf("finger = [%-5d] %n", finger);//%-5d > 뒤에서부터 5자리를 맞춤
		System.out.printf("finger = [%05d] %n", finger);//%05d > leading zero, 공백을 0으로 채우겠다.
		System.out.printf("big = %d%n", big);		
		System.out.printf("hex = %#x%n", hex);		// '#'은 접두사(16진수 0x, 8진수 0) #x > 출력에 0x 를 붙여서 16진수를 나타냄
		System.out.printf("hex = %x%n", hex);		// #를 뺴서 0x가 빠진채로 출력
		System.out.printf("octNum=%o, %d%n", octNum, octNum);
		System.out.printf("hexNum=%x, %d%n", hexNum, hexNum);
		System.out.printf("binNum=%s, %d%n", Integer.toBinaryString(binNum),binNum); // %s 문자열 ? toBinaryString > 2진법으로 나타냄, Binary 2진수 String문자열
		// 2진법을 나타내는 것이 없기 때문에 Integer.toBinaryString(binNum)로 2진수를 나타내고, binNum을 %d 에 대입해서 2진수를 10진수로 나타냄
	}
}

 

위의 사진과 같이 형식과 맞지 않는 입력했을 때, Console에 뜨는 문구

 

화면에서 입력받기 Scanner

ScannerEx.java

 

package day2_190612;

import java.util.Scanner; // Scanner 변수를 쓰기 위해 추가

public class ScannerEx {
//	@SuppressWarnings("resource")
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in); // Scanner class 의 객체를 생성
		
		System.out.println("두 자리 정수를 입력하세요.");
		String input = scanner.nextLine(); // 입력받은 내용을 input 에 저장
		int num = Integer.parseInt(input); // 입력받은 내용을 input 타입의 값으로 변환
		
		System.out.println("두 자리 정수를 한번 더 입력하세요");
		input = scanner.nextLine();
		int num2 = Integer.parseInt(input);
		int result = num + num2; // 입력받은 num,num2 값 합산
		System.out.println("두 수의 합은 " + result + " 입니다."); //출력
		System.out.printf("두 수의 합은 %d 입니다.\n",result); // println을 printf 로 나타내는것. 결과는 같음
		
		scanner.close(); // 입력 받는 메모리 반환? 이거 안쓰면 Scanner scanner = new Scanner(System.in); 여기서 scanner 불안정 뜸 
	}
}

 

빨간 표시 안의 %는 얼마나 많이 사용하는지 의 %

ScannerEx2.java

 

package day2_190612;

import java.util.Scanner;

public class ScannerEx2 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("두자리 정수를 하나 입력해주세요.>");
		String input = scanner.nextLine();
		int num = Integer.parseInt(input);
		
		System.out.println("입력내용 :" + input);
		System.out.printf("Num = %d %n", num);
		
		scanner.close();
		
	}
}

 

 

진법과 2의 보수법

190612.txt

...더보기

2진수

1001  > 9

1 * 2^3 8
0
0
1 * 2^1 1

11010 > 26

1 * 2^4 16
1 * 2^3 8
0
1 * 2^1 2
0

10진수

123

1 * 10^2
2 * 10^1
3 * 10^0

8진수

077  >  63

0 * *^2 0
7 * 8^1 56
7 * 8^0 7

16진수

0xFF  >   255
15 * 16^1 240
15 * 16^0 15

16->10 변환

2진수로 변환 해서 4개씩 나눠서하면 16진수 변환
  3개씩 나눠서 하면 8진수 변환

82 => 52_16
0101 | 0010
  5 2

93         10진수
0101 | 1101 2진수
  5 D  16진수 10부터 A로 변환되는것을 유의
   135     8진수

실수 진법변환

소수부분을 2로 곱하여 0이 될때까지 곱하여 구함

0.625_(10) -> 0.101_(2)


음수의 2진표현 , ☆2의 보수법

1의 보수 -> 1과 0을 뒤집는 것 or 기존의 2진수와 합해서 모두 1이 되는 것. 1101 + 0010 = 1111
2의 보수 -> 1의보수 + 1

ex)
        부호절대값
-10 (절대값> 1010 (1의보수> 0101 (2의보수(1의보수+1)> [ 0110 = -10 ]
-7  (절대값> 0111 (1의보수> 1000 (2의보수(1의보수+1)> [ 1001 = -7  ]

왜 2의 보수를 써야 하는가?

계산을 했을 때 -0이 생기기 때문에 없애기 위해서 써야하고.
가산기를 이용한 덧셈? 때문에 2의 보수를 써야한다?


 26 00011010  음수를 저장하기 위해서는 체계를 뒤집어서 저장해야한다.
    11100101 > 1의보수
           1 > +1 (1의보수 +1)
-26 11100110 > 2의 보수


반가산기 - 논리를 많이 씀 TRUE , FALSE
    AND, OR, NOT

 A,B = 입력값 , C = 올림값 , S = 합계
A B C S
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0

-

DigitTest.java

 

package day2_190612;

public class DigitTest {
	public static void main(String[] args) {
		int i1 = 0b1001; //2진수
		int i2 = 0b11010;
		
		System.out.println(i1);
		System.out.println(i2);
		
		int i3 = 077; //8진수
		System.out.println(i3);
		
		int i4 = 0xFF; //16진수 는 10부터 A~F(10~15) 
		System.out.println(i4);
		
		int i5 = 93;
		int i6 = 62;
		System.out.printf("%d, %s %o, %#x %n", i5, Integer.toBinaryString(i5),i5,i5); //%d 10진수 %s 2진수 문자열 표현, %o 8진수 %#x 16진수
		System.out.printf("%d, %s %o, %#x %n", i6, Integer.toBinaryString(i6),i6,i6);
		
		int i7 = 55;
		System.out.printf("%d, %s %o, %#x %n", i7, Integer.toBinaryString(i7),i7,i7);
		int i8 = 7162;
		System.out.printf("%d, %s %o, %#x %n", i8, Integer.toBinaryString(i8),i8,i8);
//		int i9 = 98;
		
		//보수 test . 2의 보수는 기존의 2진수화는 다른 체계로 생각을 해서 하는 것이 좋다.
		System.out.println(Integer.toBinaryString(10)); //음수에서 1이 많이 표시되는 경우는 int 를 기반으로 하기때문에 32자리를 다 표현되고
		System.out.println(Integer.toBinaryString(-10)); //양수는 0이 생략되서 표현된다.
		
		System.out.println("0000000000000000000000000000"+ Integer.toBinaryString(10)); // 생략된 0을 출력에서 이해하기 쉽게 자리수 맞춰서 씀
		System.out.println(Integer.toBinaryString(-9)); 
		
		// -7
		// 0111 부호절대값
		// 1000 1의 보수
		// 1001 2의보수
	}
}

day2_190612.zip
0.00MB