190612
문자 리터럴 , 문자열 리터럴 예제
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진수로 나타냄
}
}
화면에서 입력받기 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의보수
}
}