2일차 JAVA (2)
1. 컴퓨터에 데이터가 저장되는 방법: 컴퓨터는 2진수로 저장
2진수: 10진수를 2로 나누어 몫과 나머지를 기재 -> 몫이 0이 아니면 다시 2로 나눔 (반복) -> 더이상 나눌 수 없으면 나머지 포함 역순으로 기재
2. 실수: 10진수의 소수를 2진수의 소수로 변경할 때는 소수 부분에 2를 곱해서 정수 부분을 순서대로 표기
예시)
0.625 X 2 = 1.25, 1을 끌고 와서 0.1 표기
1을 뺀 0.25 X 2 = 0.5, 0을 끌고 와서 0.10 표기
0을 뺀 0.5 X 2 = 1.0, 1을 끌고 와서 0.101 표기
끝
* 0.6 을 계산해보면 0.1001 까지 나오고 계속 반복하게 된다.
0.1001100110011001.... 고로 실수를 계산을 하게 되면 잘못된 결과가 종종 나오기도 한다.
* 0.1 을 1000번 더하면 100이 아니라 99.9999999 ... 가 나오게 된다.
정수는 정확하게 계산하므로 이 경우에는, 1을 1000번 더하고 나누기 10을 하면 정확한 계산이 나온다.
3. 음수 표현: 2의 보수를 이용해서 저장
1의 보수: 0->1 / 1->0
2의 보수: 1의 보수 +1
뒤에서 가장 가까운 1을 찾고, 그 앞부분은 1의 보수를 취하며, 찾은 1부터 뒷부분은 놔둔다.
* 컴퓨터는 -3을 알지 못한다. (음수를 알지 못한다.) 3의 2의 보수를 알고 있는 것.
4. byte: 파일 입출력이나 통신에 사용된다.
실습) 번호와 키를 저장하고 출력
public class numheight {
public static void main(String[] args) {
int num = 4;
double height = 156.6;
System.out.println("나의 번호는 "+num+"번 이고, "+"내 키는 "+height+"cm 입니다.");
}
}
5. 작은 자료형의 데이터는 큰 자료형의 변수에 대입 가능
6. 형 변환(Type Casting): 데이터의 모양을 변경하는 것
1) 자동형 변환 -> 작은 자료형의 데이터를 큰 자료형의 변수에 대입할 때 자동으로 큰 자료형으로 변환해서 대입
-> int 보다 작은 자료형의 산술연산은 int로 변환되어 수행
2) 강제형 변환 -> 강제 데이터의 크기를 변환
-> 숫자는 숫자로만 변환
-> 원하는 연산의 결과를 얻기위해서 수행
-> 실수는 정수로 변환 될때, 소수를 버려야함
package java1219;
public class TypeCasting {
public static void main(String[] args) {
//자동 형 변환
double d = 10;
System.out.println("d: "+d);
//Test
double test1 = (int)10.9;
System.out.println("test1: "+test1);;
//강제 형변환
int x = (int)10.9;
System.out.println("x: "+x);
//반올림
int y = (int)(10.9+0.5);
System.out.println("y: "+y);;
}
}
예시)
short는 2byte (숫자형)
char는 2byte (문자형)
char c = 10;
short s = c; (에러발생)
- ~ (틸드): 정수 데이터에만 사용이 가능한 연산자로 1의 보수로 리턴, 그래픽 프로그램에서 반전에 이용
- ! (not): boolean 데이터에만 사용, true -> false / false -> true
- 부호(+,-)
- ++, --: 정수 변수에만 사용가능한 연산자로 변수의 값을 1 증가 시키거나 1 감소 시키는 연산자, 변수에 앞에 사용하면 증감을 하고 명령문을 수행하고 뒤에 사용하면 명령문을 수행하고 증감
package java1219;
public class Arithmetic {
public static void main(String[] args) {
short s1 = 20;
short s2 = 10;
short s3 = s1+s2;
System.out.println("s3: "+s3);
}
}
(Test 실습)
Q. 위의 예제를 char 로 바꾸게 되면 어떻게 될까?
public class Arithmetic {
public static void main(String[] args) {
short s1 = 20;
short s2 = 48; //0의 ASCII code
short s3 = (short)(s1+s2);
char s4 = (char)(s1+s2);
char s5 = (char)s2;
System.out.println("s3: "+s3);
System.out.println("s4: "+s4);
System.out.println("s5: "+s5);
}
}
9. Shift 연산자
-> 비트 단위로 밀어내는 연산자
-> 정수 데이터에서만 사용 가능
-> 첫번째 비트는 제외하고 작업
-> 32보다 크거나 같은 횟수는 32로 나눈 나머지 만큼만 수행
X >> Y : X를 Y만큼 오른쪽으로 shift
10. 관계연산자
-> 크기비교연산자
-> 동일한 자료형의 크기를 비교해서 boolean 으로 리턴하는 연산자
1) >, >=, <=
2) == (같다) !=(다르다)
11. 논리연산자
1) 조건 논리 연산자 -> boolean 데이터를 가지고 연산을 수행한 후, 결과를 boolean으로 리턴하는 연산자
&& :and
|| :or
! :not
don't care : &&의 연산의 앞부분이 false면 뒷부분 까지 가지 않고 false로 리턴하고 종료
<윤년 구하기>
public class Leafyear {
public static void main(String[] args) {
int year = 2400;
boolean leaf;
//leaf 조건은? 2가지 조건중 하나를 만족하면 윤년 -> 1) 4의 배수이고 100의 배수가 아닌 경우 2) 400의 배수
leaf = ((year%4==0)&&(year%100!=0))||(year%400==0);
System.out.println(leaf);
}
}