long num = 3147483647; // 컴파일 오류 발생
byte num1 = 5; // 허용
short num2 = 25; // 허용
System.out.println(3147483647L + 3147483648L);
int num = 100_000_000;
// 10진수로 int형 정수 표현
int num = 11 + 22 + 33;
// 2진수로 int형 정수 표현: 2진수 표현 앞에 0B 또는 0b 삽입
int num205 = 0B1101101;
// 8진수로 int형 정수 표현: 숫자 앞에 0 삽입
int num = 011 + 022 + 033;
// 16진수로 int형 정수 표현: 숫자 앞에 0x 또는 0X 삽입
int num = 0x11 + 0x22 + 0x33;
double pi = 3.1415;
System.out.println(3.004999f + 2.0004999f);
\b : 백스페이스 문자
\t : 탭 문자
\\ : 백슬래시 문자
\' : 작은따옴표 문자
\" : 큰따옴표 문자
\n : 개행 문자
\r : 캐리지 리턴 문자 (커서를 왼쪽 끝으로 이동시킴)
System.out.println("AB" + '\r' + 'C'); // CB
System.out.println("1$에 0.88" + '\u20AC'); // 1$에 0.88€
이때 음의 정수 -1을 위의 방식대로 10000001로 표시하면,
00000001 + 10000001 = 10000010
위 연산의 경우 어떠한 방식으로 해석을 하건 0이 될 수 없음 -> 음의 정수는 다른 방식으로 표현해야 함
양의 정수의 이진수 표현에 2의 보수를 취한 결과를 음의 정수로 표현한다
정수는 오차 없이 표현이 가능하지만, 광대한 실수를 오차 없이 표현하는 것은 불가능함
-> 정밀도를 낮추고 대신에 표현할 수 있는 값의 범위를 넓히자
예를 들어 부호 비트에는 0을, e에는 00000을, m에는 0000000001을 넣으면,
+(1.1)x2^-127이 되며, 이 값은 약 6.46521893 x (10의 -39승)임
하지만 위의 표현 방식으로는, 6.4652...보다 아주 조금 작거나 큰 수는 표현하지 못함
즉 상대적으로 표현하는 대부분의 값에는 오차가 존재하게 됨
double num1 = 1.0000001; // 1.0000001에 최대한 가까운 수가 만들어짐
num = (short)(num + 77L) // 형 변환 필요
num += 77L // 형 변환 불필요
num = 2; // 00000010
System.out.print((byte)(num << 1)); // 00000100 (2배 증가)
num = 8; // 00001000
System.out.print((byte)(num >> 1)); // 00000100 (절반으로 줄어듦)
조건 ? 수1 : 수2
- 기호 ?의 왼편이 true이면 기호 : 의 왼편에 있는 수가 반환됨
- 기호 ?의 왼편이 false이면 기호 :의 오른편에 있는 수가 반환됨