+프로그램을 실행하기 위해서는 메모리가 필요하다
+운영체제가 메모리를 관리함
+운영체제가 공간확보 못하면 메모리가 부족하다고 뜸
+메인 메소드(함수) 안에서는 코드가 순차적으로 진행됨
자료형 | 데이터 | 메모리 크기 | 표현 가능 범위 |
---|---|---|---|
boolean | 참과 거짓 | 1바이트 | true, false |
char | 문자 | 2바이트 | 모든 유니코드 문자 |
byte | 정수 | 1바이트 | -128 ~ 127 |
short | 정수 | 2바이트 | -32768 ~ 32767 |
int | 정수 | 4바이트 | -2147483648 ~ 2147483647 |
long | 정수 | 8바이트 | -9223372036854775808~9223372036854775807 |
float | 실수 | 4바이트 | ±(1.40X10-45 ~ 3.40X1038) |
double | 실수 | 8바이트 | ±(4.94X10-324 ~ 1.79X10308) |
8bit == 1byte
IPv6 ->0000000.0000000.0000000.0000000 32bit ==4byte
■■■ 음의 정수 표현 ■■■
①-10을 byte 기반의 비트열로 나타낸다.
00001010 ->11110101-> 11110110
(2진수로 만들고 ->보수하고->1을 더함)
②-27을 byte 기반의 비트열로 나타낸다.
00011011 ->11100100->11100101
③-31을 byte 기반의 비트열로 나타낸다.
00011111->11100000->11100001
④-13을 byte 기반의 비트열로 나타낸다.
0001101->1110010->0000011
⑤ byte 기반의 11001010을 10진수 정수형으로 나타낸다.
1을 뺌 : 11001001
1의 보수 : 00110110
32+16+4+2=54
-54
⑥ byte 기반의 11110101을 10진수 정수형으로 나타낸다.
1을 뺌 : 11110100
1의 보수:00001011
1+2+8=11
-11
⑦ byte 기반의 10000001을 10진수 정수형으로 나타낸다.
1을 뺌 : 10000000
1의 보수:01111111
1+2+4+8+16+32+64=127
-127
⑧ byte 기반의 10101010을 10진수 정수형으로 나타낸다.
10101000
01010111
1+2+4+16+64=87
-87
⑨ byte 기반의 10000101을 10진수 정수형으로 나타낸다.
10000100
01111011
1+2+8+16+32+64=123
-123
⑩ byte 기반의 11111111을 10진수 정수형으로 나타낸다.
11111110
00000001
1
-1
<비트뺄셈>
02
10
01
01
-> 연산때문!
byte나 short로 저장을 해도 나중에 다른값과 연산하면서 int로 바꿔야하는 경우가 많음
->연산이 늦더라도 정밀도가 double(소수점 이하 12자리 정밀도)이 더 좋음
A = B
B를 → A에 대입
<접미사F>
int num1 = 10000000000; 안됨(범위초과)
int num2 = 10000000000;안됨(접미사 불포함)
int num2 = 10000000000l; 됨
int num2 = 10000000000L; 됨
WHY?
-> long타입은 뒤에 L을 붙여줘야 자바가 int로 인식하지 않음
오른쪽 먼저보고 왼쪽으로 집어넣는데 오른쪽이 int로 인식하니까 안들어가짐
<접미사L>
float num3 = 12.45;
이러면 무조건 double 잡음
그래서
float num3 = 12.45f;
이렇게 해야 float
case1
long num1 = 2147483648L;
int num2 = (int)num1;
case2
int num3 = 100;
long num4 = (long) num3;
연산자 | 연산자의 기능 | 결합방향 |
---|---|---|
= | 연산자 오른쪽에 있는 값을 연사자 왼쪽에 있는 변수에 대입 예) val = 20; | ← |
+ | 두 피연산자의 값을 더한다. 예) val = 4+3; | → |
- | 왼쪽의 피연산자 값에서 오른쪽의 피연산자 값을 뺀다. 예) val = 4-3; | → |
* | 두 피연산자의 값을 곱한다. 예) val = 4*3; | → |
/ | 왼쪽의 피연산자 값을 오른쪽의 피연산자 값으로 나눈다.(몫만) 예) val = 7/3; | → |
% | 왼쪽의 피연산자 값을 오른쪽의 피연산자 값으로 나눴을 때 얻게 되는 나머지를 반환한다. 예) val = 7%3; | → |
a+=3; == a=a+3; //a를 3만큼 증가시켜라!
연산자 | 연산자의 기능 | 결한방향 |
---|---|---|
< | 예) n1 < n2 n1이 n2보다 작은가? | → |
> | 예) n1 > n2 n1이 n2보다 큰가? | → |
<= | 예) n1 <= n2 n1이 n2보다 작거나 같은가? | → |
>= | 예) n1 >= n2 n1이 n2보다 크거나 같은가? | → |
== | 예) n1 == n2 n1이 n2보다 같은가? | → |
!= | 예) n1 != n2 n1이 n2보다 작다른가? | → |
&&(논리and), ||(논리or), !(논리부정(not))
++ --
++n(prefix) 선대입
n++(postfix) 후대입
class PrefixOp
{
public static void main(String[] args)
{
int num1 = 7;
int num2, num3;
num2 = ++num1;
num3 = --num1;
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
}
}
prefix 결과값👀
num1 = 8
num2 = 8
num3 = 7
class PostfixOp
{
public static void main(String[] args)
{
int num1 = 7;
int num2, num3;
num2 = num1++;
num3 = num1--;
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
}
}
postfix 결과값👀
num1 = 7
num2 = 7
num3 =8
연산자 | 연산자의 기능 | 결합방향 |
---|---|---|
& | 비트단위로 AND 연산을 한다. 예) n1 & n2; | → |
l | 비트단위로 OR 연산을 한다. 예) n1 | n2; |
^ | 비트단위로 XOR 연산을 한다. 예) n1 ^ n2; | → |
~ | 피연산자의 모든 비트를 반전시켜서 얻은 결과를 반환 예) ~n; | ← |
연산자 | 연산자의 기능 | 결한방향 |
---|---|---|
<< | -피연산자의 비트 열을 왼쪽으로 이동 -이동에 따른 빈공간을 0으로 채움 예)n<<2; ->n의 비트열을 투칸 왼쪽으로 이동 시킨 결과 반환 | → |
>> | -피연산자의 비트 열을 오른쪽으로 이동 -이동에 따른 공간은 음수의 경우1, 양수의 경우 0으로 채움 예)n>>2; ->n의 비트열을 투칸 오른쪽으로 이동 시킨 결과 반환 | → |
>>> | -피연산자의 비트 열을 오른쪽으로 이동 -이동에 따른 빈공간을 0으로 채움 예)n>>>2; ->n의 비트열을 투칸 오른쪽으로 이동 시킨 결과 반환 | → |
public class Test003
{
public static void main(String[] args)
{
//변수 선언
int a;
//변수 초기화(변수 a에 10 대입)
a = 10;
//변소 선언 및 초기화(선언과 대입을 한 번에 처리)
int b = 20;
//변수 선언
int c;
//출력문을 통해 확인(테스트)
System.out.println(c);
}
}
결과👀