정수형식
byte (1byte) : 0~255
short (2byte) : -3만~3만
int (4byte) : -21억 ~21억
long (8byte) : ~~
sbyte (1byte) : -128~128 (s는 sin약자)
ushort (2byte) : ~6만
uint (4byte) : ~43억
ulong (8byte) : ~~
진수(진법)
10진수: 0~9
2진수: 0b00 식으로 표기함, 0b00, 0b01, 0b10, 0b11, 0b100... (0,1,2,3,4...)
16진수: 0~9 abcdef 로 표기함 (15까지 표기할 방법이 없어서 소문자로 표기함) 0x00,0x01,0x02....0x0a...0x0f,0x10,0x11...
2진수로 16진수 표기하기 쉬움
0b10001111 => 0x8F
정수의 범위
sbyte에서 최상의 bit는 음수를 나타냄 (1)000 0000
0011 0100 = 52 의 응수를 찾기
1100 1011 처럼 0을 1로, 1을 0으로 바꾸고 1을 더함.
1100 1100 = -52가 되는 것임
나중에 비트 연산이 사용되는 기법이 있으니 참고!
불리언, 소수, 문자, 문자열 형식
불리언: bool 타입은 1byte이다. 왜 굳이 1byte일까? 1bit로도 표현이 가능한데... 왜냐하면 컴퓨터가 1byte를 다루는게 훨씬 빠르기 때문이다.
소수: float(4byte), double(8byte) 가 주로 쓰인다. double이 더 정확...
문자: char type은 2byte이다. character 타입은 딱 하나의 문자만 담아~ string은 문자의 나열 이며 8byte이다.
형식 변환 (형 변환)
형식 변환이란 어떤 데이터를 다른 데이터 타입으로 전환하는 것을 뜻하는데... 경우가 여러가지 있다.
1. 데이터 크기가 다른 경우
int a = 1000;
short b = (short)a;
위의 예에서는 큰 사이즈(int)에서 작은 사이즈(2byte)로 명시적 형 변환을 해주는데... 사이즈가 넘치기 때문에 데이터가 유실되어 형 변환이 된다. (overflow exeption) 반대의 경우는 상관 없음.
2. 데이터 크기는 같아도 부호가 다르면
byte c = 255;
sbyte d = c;
위의 경우에는? sbyte는 255를 표현하지 못하는데 어떻게 될까? 결과적으로 sbyte에는 -1이라는 값이 들어감. 변수 c를 이진수로 => 0b11111111 이렇게 표현되는데, 0b11111111를 sbyte로 표현하면 그저 -1되기 때문. 어쨋든 이런 경우는 underflow 라 부름.
3. 소수
소수끼리의 형변환은 주로 부정확하고 근사치를 보여주는 경우가 대부분.
float f = 3.1414f;
double d = f;
이 경우에 double d 에는 3.1414라는 정확한 값이 안 들어가고 그 근사치가 입력됩니다.
데이터 연산
.... 기본적으로 사친연산 가능하고, 나머지 연산 (%) 도 있고... 증가 연산자 ++, 감소 연산자 -- 등 이 있다. 기본적인 내용이라 패스.
비트 연산
잘 쓰이진 않지만, 알아두면 좋아요~
연산자 종류에는 <<, >>, &, |, ^, ~가 있어요.
<< 1은 1bit를 왼쪽으로 한 칸 이동시킴, >> 1 도 마찬가지, 여기서 중요한 점은... int일 경우에는 음수 부호를 가지고 있는데, >>1 을 할 경우 음수부호가 오른쪽으로 딸려가면서, 다시 음수부호가 갱신됨. 즉 헷갈림... 그래서 왠만하면 int 쓰지말고 uint 를 쓰는 식으로 하는 걸 권장(?)
&(and), |(or), ^(xor), ~(not)... 이 추가적으로 더 있다. 서버쪽? 아이디 만드는데 쓰는 경우가 있나봄.
xor이 자주 쓰이는 경우가 있는데 암호학(?), xor 연산을 두 번 해주면 원래 값으로 돌아오는 성질 때문에.
연산 우선 순위
1. ++ --
2. * / %
3. + -
4. << >>
5. < >
6. == !=
7. &
8. ^
9. |
우선순위 외우기 어려우니깐 헷갈리는 부분은 () 쳐줘서 우선순위 강제해주면 됨.