8bit(비트) : 1byte(바이트)로 이루어져 있으며, 컴퓨터에 저장되는 정보의 가장 작은 단위는 bit입니다.
컴퓨터는 0과 1로 이루어져 있으므로, 1bit는 0이나 1의 값을 가질 수 있습니다.
byte는 bit보다 8배 큰 단위입니다.
데이터 타입 | 메모리의 크기 | 표현가능범위 |
---|---|---|
byte | 1byte | -128~127 |
short | 2byte | -32,768 ~ 32,767 |
int | 4byte | -2,147,483,648~2,147,483,647 |
long | 8byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
데이터 타입 | 메모리의 크기 | 표현가능범위 |
---|---|---|
float | 4byte | ±(1.40129846432481707e-45 ~ 3.40282346638528860e+38) |
double | 8byte | ±(4.94065645841246544e-324d ~ 1.79769313486231570e+308d) |
참고1 : http://www.tcpschool.com/java/java_datatype_floatingPointNumber
참고2 :
https://m.blog.naver.com/PostView.nhn?blogId=7rlaguswns7&logNo=221349728794&proxyReferer=https:%2F%2Fwww.google.com%2F
말그대로 소수점이 고정되었다는 의미입니다.
소수부자리의 자릿수를 미리 정하여 2진수로 변환한 값을 미리 대입한 방식입니다.
고정소수점 방식은 정수부와 소수부의 자릿수가 크지 않아 표현할 수 있는 범위가 작다는 단점이 있습니다.
부동, floating의 뜻은 '떠다니다,유동적이다' 라는 뜻을 가지고 있다. 이는 소수점이 고정되어 있지 않고 좌우로 움직일 수 있다는 뜻을 말한다.
부동소수점 방식은 고정소수점 방식과 다르게 다음 수식을 이용하여 매우 큰 실수까지도 표현할 수 있습니다. 대부분의 시스템에서는 부동소수점 방식으로 실수를 표현하고 있습니다.
float형 부동소수점 방식
double형 부동소수점 방식
데이터 타입 | 메모리의 크기 | 표현가능범위 |
---|---|---|
char | 2byte | 모든 유니코드 문자 |
출처 : https://gyugyu.tistory.com/6
c언어에서는 1byte(ASKII코드)를 가지고 있지만, 자바에서는유니코드( 2 byte 문자 체계)를 사용하므로 2 byte의 크기를 가지고 있습니다.
유니코드는 세계 각국의 언어를 통일된 방법으로 표현할 수 있게된 국제적인 코드규약이다. 동양 3국의 한글, 한자 또는 일어 등과 같은 문자는 1 byte로는 표현이 불가능하기에 2byte로 문자를 표현하는 유니코드가 만들어 졌다.
형변환이란 한쪽의 데이터 타입을 다른쪽의 데이터타입으로 전환해주는 전환작업입니다.
double a=3.0F
위의 코드는 double타입의 변수를 a에 float타입의 값을 대입하고 있습니다. 이 때 3.0F의 값은 자동으로 double타입으로 형변환이 일어납니다. 이것이 가능한 이유는 double타입이 float타입보다 더 많은 수를 표현 할 수 있기 때문입니다. 타입을 변경해도 정보의 손실이 일어나지 않는 경우 자동 형 변환이 일어납니다.
반대로 아래의예제는 상수 3.0은 double형이어서, 표현범위가 좁은 float에 넣으려고 하기 때문에 오류가 발생합니다.
[예제]
float a=3.0
자동 형 변환의 원칙은 표현범위 좁은 데이터 타입에서 넓은 데이터 타입으로의 변환만 허용된다는 것입니다.
자동 형 변환이 적용되지 않을 경우에는 수동으로 형 변환을 해야합니다. 이를 명시적 형변환이라고합니다. 명시적 형 변환 방법으로는 데이터값(데이터 타입)이 있습니다.
아래 예제를 실행하면 자동 형 변환이 이루어지지 않아 오류가 발생하게 됩니다.
[예제]
float a=100.0;
int b=100.0F;
아래코드로 수정하면 형 변환으로 인해 오류가 발생하지 않습니다.
[예제]
float a=(float)100.0; //double형에서 float형으로 형변환
int b=(int)100.0F; //float형에서 int형으로 형변환
연산자(operator)는 특정한 작업을 하기 위해서 사용하는 기호를 의미합니다.
[예제]
//빼기, result=2
result=result-1;
System.out.println(result);
//곱셈, result=4
result=result*2;
System.out.println(result);
//나누기, result=2
result=result/2;
System.out.println(result);
//덧셈, result=10
result=result+8;
System.out.println(result);
//나머지, result=3
result=result%7;
System.out.println(result);
단항연산자는 하나의 항을 대상으로 연산이 이루어지는 연산자입니다.
증감연산자로 변수의 값에 1을 더하거나 1을 뺄 때 사용합니다. 연산자가 값의 앞에 있으면 값이 먼저 증가하고, 변수의 대입되게 되고 값의 뒤에 있다면 대입이 먼저된 이후 값이 증가합니다.
[예제]
int i = 3;
i++;
System.out.println(i); // 4 출력
++i;
System.out.println(i); // 5 출력
System.out.println(++i); // 6 출력
System.out.println(i++); // 6 출력
System.out.println(i); // 7 출력
위에 예제를 살펴보면 i++는 다음 println으로 넘겨준 다음 값을 출력하고, ++i는 println에 넣어 값을 바로 출력합니다.
boolean은 참과 거짓을 의미하는 1byte(true/false) 데이터타입입니다.
비교연산자 종류 : ==, !=, >, >=, .equals
[예제]
System.out.println(1==2); //false
System.out.println(1==1); //true
System.out.println("one"=="two"); //false
System.out.println("one"=="one"); //true
.equals는 문자열을 비교할 때 사용하는 메소드입니다.
아래 예제에서 문자와 문자를 비교할때는 '=='를 사용하지 않고, equals를 사용합니다.
[예제]
String a="Hello world";
String b=new String("Hello world");
System.out.println(a==b); //false
System.out.println(a.equals(b)); //true
equals()는 객체끼리 값을 비교할 수 있는 '메소드'입니다
==는 객체의 참조(주소)값을 비교하는 '연산자'입니다.
String b="abcd";
String c=new String("abcd");
if (a==b) {
System.out.println("a와 b는 참조값이 같다.");
}else {
System.out.println("a와 b는 참조값이 다르다.");
}
if (a==c) {
System.out.println("a와 c는 참조값이 같다.");
}else {
System.out.println("a와 c는 참조값이 다르다.");
}
if (a.equals(b)) {
System.out.println("a와 b는 참조값이 같다.");
}else {
System.out.println("a와 b는 참조값이 다르다.");
}
if (a.equals(c)) {
System.out.println("a와 c는 참조값이 같다.");
}else {
System.out.println("a와 c는 참조값이 다르다.");
}
}
결과 :
a와 b는 참조값이 같다.
a와 c는 참조값이 다르다.
a와 b는 참조값이 같다.
a와 c는 참조값이 같다.
1) 자료형들 메모리 그림으로 표현하는 게 좋습니다. 부호와 크기 영역도 표시해서요.
2) float와 double에 한해서는 부동소수점에 대한 정보도 추가하는게 좋습니다.
3) java에서는 char를 왜 2바이트로 쓰는지 염두해 두면 좋겠습니다.
문자 표현에 ascii code를 쓴다면 1바이트겠지만, 유니코드를 쓴다면 2바이트가 맞겠지요.
4) 실수 숫자에 F를 붙이면 float형, 안붙이면 double형이란건 계속 주의해야 겠네요.
5) boolean은 1비트라는 것 염두.
6) .equals는 문자열 간 비교를 하는 것. 문자 간 비교도 되는지 확인이 필요.
7) .equals 예제에서 아래 두 줄을 추가하여, a와 b가 문자열 첫 글자에 대한 주소를 나타냄을 확인하는 것이 좋겠네요.
System.out.println(a); 0x00303320032
System.out.println(b); 0x03402340333