23.04.25
CS 16진수
0~15 총 16개로 표현하는 수 체계
0~F까지로 씁니다.
- 10진수 대신 16진수를 쓰는 이유?
= 컴퓨터는 2진수(반도체)기반이라 16진수가 더 익숙함. 왜냐하면 2를 거듭제곱 하면 되기 때문.
2진수, 8진수, 10진수, 16진수
- 1~16 = 컴퓨터 0~15 총 16개, 0~9 → 10개
- 2진수 - binary = 0, 1
- 8진수 - octal = 1 ~ 8
- 10진수 - decimal = 1~10
- 16진수 - hexadecimal 6개
16진수 → 16개 숫자
0~9 → 10개 | 10 11 12 13 14 15 → 6개 |
0 1 2 3 4 5 6 7 8 9 | a b c d e f |
2^4 = 16
2 * 2 * 2 * 2 = 16
4 * 4 = 16
변수 이름을 잘 지어야 하는 이유
: 내 코드에서 방향을 잃지 않기 위해.
특히 초보자라면 더욱 중요합니다.
*// 10진수 -> 8진수*
Scanner sc = **new** Scanner(System.in);
**int** iDecimal = sc.nextInt();
String hexadecimal = Integer.toHexString(iDecimal);
System.out.println(hexadecimal.toUpperCase());
이 코드의 경우 iDecimal 이라는 변수명으로 int를 입력 받는 다는 것을 표현 할 수 있습니다.
변수명 hexadecimal의 경우 이 변수에는 16진수 값이 들어간다는 것에 집중 할 수 있습니다.
- 앞에서 받은 iDecimal이 int라는 것을 변수명에서 알 수 있기 때문에
10진수를 16진수로 바꾼다는 흐름이 자연스럽게 그려집니다.
hexadecimal.toUpperCase()
16진수는 0 ~ f까지 이므로 String타입 이어야 하고 .toUpperCase()는 16진수를 대문자로 표현한다는 흐름이 코드에 보입니다.
아래와 같이 a, b로 쓰면 스스로 함정에 빠지게 될 수 있습니다.
int a = sc.nextInt();
String 타입
: 문자열은 String으로 표현, 참조타입
String str = “Hello, World!”; //str 변수 선언
String은 클래스 이므로 문자열 연결, 비교, 검색,추출, 분리, 길이 세기 등의 기능이 있다.
문자열 연결
: 문자열 연결은 + 연산자를 사용하거나 .concat()을 이용한다.
String str1 = "Hello";
String str2 = "World";
String result = str1 + str2;
//"HelloWorld!" 출력
String result = str1 + " " + str2; // 띄어쓰기 할 때
//"Hello World!"출력
문자열과 변수 연결
public class StringConcat {
public static void main(String[] args) {
String name = "가나다";
int balance = 10000;
String message = name + "님의 통장 잔고는 " + balance + "원입니다.";
System.out.println(message);
}
} //가나다님의 통장 잔고는 10000원입니다. 출력
문자열 포매팅 : String.format();
: 문자열 사이에 변수를 넣어서 메시지를 만들고 싶을 때 +연산자를 이용할 수 있지만, .pringf()와 같이 포매팅 방식을 이용할 수 있다.
package week2.day7;
public class StringFormating {
public static void main(String[] args) {
String name = "유다언";
int balance = 20000000;
System.*out*.printf("%s님의 통장 잔고는 %d원 입니다.", name, balance);
}
}
문자열 자르기 : substring()
: 문자열을 자를 때에는 .substring 이용
방법:
.substring(시작_인덱스, 미만_인덱스);
.substring(시작_인덱스);
//인덱스는 0부터 센다.
예제)
String str = "Hello";
String firstLetter = str.substring(0, 1); // 첫 번째 글자(H) 자르기
System.out.println(firstLetter);
//H출력
String str = "대한민국";
String subStr = str.substring(0, 2); // 인덱스 0부터 2 이전까지 자르기
System.out.println(subStr);
//대한 출력
String str = "대한민국";
String result = str.substring(2);
System.out.println(result);
//민국 출력
String str = "대한민국";
String result = str.substring(1, 3);
// 한민 출
실습)
package week2.day7;
public class StringSub {
public static void main(String[] args) {
String str = "Hello";
System.out.println(str.substring(0, 1)); // h
System.out.println(str.substring(0, 2)); //he
System.out.println(str.substring(1, 3)); //el 만 분리
}
}
문자열 비교 : .equals( ) **
: 문자열을 비교할 때 .equals() 이용
== 비교 연산자
= 대입연산자
String클래스는 char[ ] 배열로 만들어져 있다. ⇒ String은 Immutable(불변) 객체이다.
String → 참조 타입(Reference Type)
타입에는 Stack영역(원시타입)과 Heap영역(참조타입)이 있음
Heap영역에 생성된 객체를 참조하는 것이 참조타입
방법:
“문자열1”.equals(“문자열2")
String str1 = “GOLD”;
129
Strint str2 = “GODL”;
str1.equals(str2);
public class StringEquals {
public static void main(String[] args) {
System.out.println("GOLD" == "GOLD");
}
} //true출력
public class StringEqualsSubstring {
public static void main(String[] args) {
String str1 = "GOLD";
String str2 = "G"; //GOLD와 G가 같니?
System.out.println(str1.substring(0, 1) == str2);
}
}
//false 출력
public class StringEqualsSubstring {
public static void main(String[] args) {
String str1 = "GOLD";
String str2 = "G";
System.out.println(str1.substring(0, 1).equals(str2));
}
}
//true
자바에서는 객체끼리 ==로 비교연산을 할 때는 저 hash값(메모리의 특정위치-주소)
주소가 달라서 false가 나온다.
문자열 분리 - .split()
예시
public class StringSplit {
public static void main(String[] args) {
String str = "10 3 19 28 7 488";
String[] strArr = str.split(" ");
System.out.println(strArr[0]); //10
System.out.println(strArr[1]); //3
System.out.println(strArr[2]); //19
System.out.println(strArr[3]); //28
System.out.println(strArr[4]); // 7
System.out.println(strArr[5]); //488 출력
}
}
(codeup1019 spilt 사용 문제)
import java.util.Scanner;
public class codeup1019 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
String[] arr = str.split("\\\\.");
int val1 = Integer.valueOf(arr[0]);
int val2 = Integer.valueOf(arr[1]);
int val3 = Integer.valueOf(arr[2]);
System.out.printf("%04d.%02d.%02d",val1,val2,val3);
}
} //2013.8.5 입력시 2013.08.05 출력
배열(Array)
: 같은 타입의 여러 값을 한 개의 변수에 저장하기 위해 사용한다.
여러개의 변수를 선언하고 관리 할 때 배열을 쓴다. 길이는 고정이고 가변형은 아니다. (↔ 고정이 아닌것 Collection)
- 배열 선언하기 : 변수 타입[] 변수명;
int iVal = 10; → int 타의 변수
int[] iVals; → int 타의 배열
배열은 선언하고 초기화를 반드시 해주어야 합니다. 초기화는 new 연산자를 이용하고 변수 타입과 개수를 지정합니다.
- 변수명 = new 변수 타입[개수];
예시)
int[] iArr;
iArr = new int[5];
→ 배열은 선언하고 초기화할 때 개수를 반드시 지정해주어야한다.
배열을 선언 할 때 개수를 지정한다는 것은?
- 지정한 개수 만큼 메모리 공간을 미리 잡아 놓는다는 것
- 이미 선언한 배열의 개수를 바꿀 수 없다.
- 배열을 선언하면서 초기화하기
public class DefAndInitArr {
public static void main(String[] args) {
int[] iArr = new int[5]; //배열의 개수를 정하기
System.out.println(iArr);
}
}
//[I@448139f0 해시 코드가 출력됨
*** 해시코드란?*
메모리의 특정 위치를 찾아갈 수 있게 부여된 주소입니다. 그리고 [I는 int타입의 배열을 나타내며 @는 구분자입니다.
사용 :[I@해시 코드
- 배열에서 값 뽑기
: 배열에 있는 값을 출력하기 위해서는 배열을 그대로 출력하는 것이 아닌 배열의 인덱스를 통해 배열요소에 직접 접근해야한다.
인덱스는 ‘방 번호’ 0부터 시작하고 0,1,2,3과 같이 0부터 세는 것을 인덱스라고 한다.
- int[] iArr = new int[3]; // 세 칸 배열 생성
- iArr[0]; //배열명에 [] 대괄호를 붙이고 몇번째 인덱스로 접근할 것인지 적어주기
public class DefAndInitArr {
public static void main(String[] args) {
int[] iArr = new int[5]; //배열의 개수를 정하기
System.out.println(iArr[0]); //첫번째 요소인 0 출력
System.out.println(iArr[1]);
System.out.println(iArr[2]);
}
}
- Arrays.toString()을 이용하면 배열의 모든 내용을 콘솔에 출력할 수 있습니다.
예제)Arrays.toString()
- 배열에 값 넣기
: 139
예제)
import java.util.Arrays;
public class ArrayToString {
public static void main(String[] args) {
int[] iArr = new int[5];
iArr[0] = 2;
iArr[1] = 4;
iArr[2] = 7;
System.out.println(Arrays.toString(iArr));
}
}
- 연결 리스트 (Linked List): 배열처럼 크기만큼 메모리 공간을 미리 만들어 놓는 것이 아니라 추가될