쌍용 강북 교육센터 국비학원 Day 4일차
casting (형변환)
1. 자동 형변환 (묵시적 형변환)
-> 데이터타입의 크기가 작은 것에서 크기가 큰쪽으로는 자동적으로 형변환이 발생된다.
byte(1byte) -> short(2byte) -> int(4byte) -> long(8byte)
개미 병아리 강아지 사람
개미집 병아리집 강아지집 안방
float(4byte) -> double(8byte)
-> 정수타입은 실수타입으로 자동형변환이 발생한다.
char(2byte)
-> char타입은 int형으로 자동형변환이 발생한다.
2. 강제 형변환 (명시적 형변환 - casting)
-> 데이터타입의 크기가 큰것을 작은것으로 강제적으로 형변환 시키는 것을 말한다.
크기가 작은타입 = (크기가 작은타입) 크기가 큰타입
실수를 정수로 강제적으로 형변환하는 것을 말한다. 소수부는 무조건 절삭을 해버리고 정수만 나온다.
정수 = (정수) 실수
데이터 타입이 큰 것이 작은 것에 담기는 오버플로우에 주의
casting (강제 형변환)은 객체가 아닌 기본자료형 (원시형, primitive - ex) int,double 등) 만 가능하다
Operator (연산자)
- 산술연산자
+, -, *, /, %(나머지) - 기본 연산자들
<<, >>, <<< (연속적인 부등호 연산자는 참고만 할 것)
<< (왼쪽 쉬프트 연산자)
int 는 4byte 이므로 32bit 로 구성된다
10 << 3 은 정수 10을 이진수 00000000 00000000 00000000 00001010 (32bit) 로 나타내고
왼쪽 방향으로 3개를 밀어버린다. 00000 00000000 00000000 00001010___ 이 되는데
_ 자리에 0으로 채운다. 00000 00000000 00000000 00001010000 이것을 십진수로 나타내면
1*(2의 6승) + 1*(2의4승) 64 + 16 = 80 이 된다.
-> 10<<3 은 == 10 * (2의 3승) 과 같은 뜻이다. (3이 2의 지수가 되는 것이다)
>> (오른쪽 연산자)
>> 는 반대로 오른쪽 방향으로 n개만큼 밀어버린다. ex) 10>>2 == 정수 10을 오른쪽방향으로 2개
__00000000 00000000 00000000 000010 이되는데 이것에 가장 왼쪽 비트 1개, 0이면 양수이고, 1이면 음수를 나타낸다.
00000000 00000000 00000000 00000010 이 된다. 이것을 십진수로 나타내면
1 * (2의 1승) = 2 가 된다.
-> 10>>2 == 10 / (2의 2승) 이 된다.
>>>
>>>는 오른쪽 방향으로 3개를 밀어버린다. ex) 10 >>> 3 == 1
밀어버린 후 ___ 빈 자리에는 0으로 채운다. 00000000 00000000 00000000 00000001 이 된다
n = - 10 일 때
컴퓨터의 음수표현 방법은 2의 보수 표현 방법을 사용한다. 2의 보수란 1의 보수 (0은 1로, 1은 0으로 바꿔주는 것)로 변환 후 +1 해주는 것이다. 10을 이진수로 나타내면 00000000 00000000 00000000 00001010 인데 이것을 1의 보수로 변환해주면 11111111 11111111 11111111 11110101 이다 여기에 +1을 해준다. == 11111111 11111111 11111111 11110111
첫번째 bit는 부호비트로 사용되어지는데 0은 + (양수), 1은 - (음수) 를 의미한다. 이것을 십진수로 나타내면
똑같이 1이 나오는 것중에서 마지막 1만 취하고, 여기에다가 그 나머지를 끝까지 취한다. 마지막 10110을
첫번째 값만 - 을 붙이고, 나머지는 + 로 연산을 하면된다.
-1 * (2의 4승) +0 * (2의 3승) +1 * (2의 2승) +1 * (2의 1승) +0 * (2의 0승)
-> -1 * 16 + 0 + 1 * 4 + 1 * 2 + 0 == 10
- 증감 연산자
++, -- -> ' 1 ' 씩 가감하는 연산자
변수의 위치에 따라 순서대로 연산한다. ex) n++, ++n
n++ - 다른 연산을 다 마친 이후에 1씩 증감한다. (후위 증감 연산자)
++n - 맨 먼저 1씩 증감을 마친 이후에 다른 연산을 한다. (전위 증감 연산자)
- bit별 not 연산자 ' ~ '
주어진 정수값을 32bit 형태의 2진수로 바꾸어서 나타내는데 0bit는 1bit로 바꾸고, 1bit는 0bit로 바꾸어 주는 것이다.
- 논리 부정 연산자
! (느낌표) - 논리 부정 연산자
- bit 연산자
& (엠퍼센드) - and 연산자 -> 2개 bit 모두 1일때만 1, 나머지는 0
| (파이프) - or 연산자 - > 2개 bit 중에서 적어도 1개가 1이면 1, 모두 0 이어야만 0
^(꼬갈) - xor 연산자 -> 2개 bit 중에서 서로 달라야만 1, 같으면 0
정수값에만 사용 가능하고 이진수로 연산한다.
ex ) 3 & 5
0000 0011 - 3
0000 0101 - 5
-------------------
0000 0001 -> 이므로 1로 연산됨.
- 논리 연산자
&, &&, |, || - 비교 대상값이 boolean 타입에서 사용되어진다.
&, | - 단독적으로 사용할 경우 조건을 만족하더라도 이후에 문장은 연산한다.
반대로 &&, || 는 조건이 만족하는 순간 다른연산은 실행하지 않는다. (스킵한다)
- 비교 연산자
> , < , != , >= , <=
너무나도 잘 알고있는 연산자라 생략.
- 할당 연산자
+= , -= , *= , /= , %= - 연산 후 대입하는 연산자
- 삼항 연산자
변수 = (조건식) ? 값1 : 값2 ;
변수를 선언하고 나서 값을 부여하고자 할 때 사용되어지는데 조건식이 true면 변수에 값1 을 대입해주고,
조건식이 false이라면 변수에 값2를 대입해주는 것이다.
Scanner
사용자의 입출력 (Input,Output)을 받는 클래스이다.
Sanner sc = new Scanner (System.in)
nextLine(); - 키보드로부터 입력받은 문장을 읽어들이는 것인데 엔터까지 모두 읽어들인 후 스캐너 버퍼에는 아무것도 남기지 않는다.
nextInt(); - 정수 (int) 를 읽어들이는 것인데 종결자가 공백 또는 엔터이다. 종결자 (공백 또는 엔터) 앞까지의 입력해준 정수를 읽어온다. 스캐너 버퍼(sc) 에는 종결자 (공백 또는 엔터)가 삭제되는 것이 아니라 그대로 남아있게 된다.
nextDouble(); - Int와 동일하고 데이터 타입만 다르다. 남아있는 버퍼를 제거하려면 nextLine 메소드를 한번 더 사용한다.
next(); - Int와 동일하고 String 을 받는다.
스캐너를 사용한 후에는 sc.close(); 입출력을 꼭 닫아준다. (명시하지 않아도 프로그램 자동으로 종료되긴 한다.)
'Java' 카테고리의 다른 글
쌍용강북교육센터 국비 학원 Day 6일차 Java (equals, for문) (0) | 2023.01.09 |
---|---|
쌍용강북교육센터 국비 학원 Day 5일차 Java (조건문, try catch문, wrapper 클래스, Math 클래스) (0) | 2023.01.06 |
쌍용강북교육센터 국비 학원 Day 3일차 Java (생성자, overloading) (0) | 2023.01.04 |
쌍용강북교육센터 국비 학원 Day 2일차 Java (static, 자료형 타입) (0) | 2023.01.03 |
쌍용강북교육센터 국비 학원 Day 1일차 Java (Class, instance) (0) | 2023.01.02 |