728x90
[ 2022년 9월 21일 수요일 ]
형 변환(type casting)
- 데이터의 크기
byte(1) < short(2) < int(4) < long(8) < float(4) < double(8) 숫자 문자 |
** int형보다 작은 데이터타입의 연산을 진행할 경우 자동으로 int형으로 형 변환
public class TypeInteger {
public static void main(String[] args) {
//byte, short, int, long
byte a = 127; //byte는 -128 ~ 127까지만 저장 가능
byte b = -128;
short c = 32767;
short d = -32768;
int e = 2147483647;
int f = -214783648;
long g = 1234567890567890L; //long은 L을 붙임
/*
* 2진수로 저장할 때에는 0b를 붙임
* 8진수로 저장할 때에는 0을 붙임
* 16진수로 저장할 때에는 0x를 붙임
*/
int bin = 0b1010; //2진수
int octa = 064; //8진수
int hexa = 0xAC00;
System.out.println("이진수 1010은:" + bin + "입니다.");
System.out.println("팔진수 64는:" + octa +"입니다.");
//System.out.println("십육진수 AC00은:" //hexa + "입니다." );
System.out.println("-------------------------------------------------");
float fl = 3.14F;//float을 나타낼 때는 F을 붙임
double d1 = 3.14;
float f2 = 3.1415923333F; //7자리까지 유효
double d2 = 3.1415923333; //15자리까지 유효
System.out.println(f2);
System.out.println(d2);
System.out.println("-------------------------------------------------");
//e표기법
float f3 = 314.15e-2F;// 10 -2승
double d3 = 0.31415e2;// 10 2승
System.out.println(f3);
System.out.println(d3);
System.out.println("-------------------------------------------------");
boolean bool1 = true;
boolean bool2 = false;
System.out.println(bool1);
}
}
크기가 작은 데이터 타입 - > 큰 데이터 타입으로 변환 컴파일러에 의해 자동으로 형 변환 발생 (자동 형 변환: Promotion) |
크기가 큰 데이터 타입 - > 작은 데이터 타입으로 변환 캐스트 연산자를 사용하여 변환할 데이터 타입을 명시 (강제 형 변환: Type Casting) |
- 문자 타입 변수 ( char / string )
public class TypeTest {
public static void main(String[] args) {
//단일문자를 저장하는 char
char c1 = 'A';
char c2 = 65;
System.out.println(c1);
System.out.println(c2);
//아스키코드 -> 유니코드의 등장으로 2바이트로 확장되고 부호없는 비트값 65536개의 문자를 표기
char c3 = '가';
char c4 = 44032;
char c5 = '\uAC00';
System.out.println(c3 + "-" + c4 + "-"+ c5);
String s1 = "hello";
String s2 = " world"; //공백도 문자로 인식
//문자열은 + 로 연결하면 붙인 결과값 도출
System.out.println(s1 + s2);
//문자열은 길이를 확인 length()
System.out.println(s1.length());
//문자열과 다른 타입의 + 연산
System.out.println(100 + 200);//300
System.out.println("100"+200);//문자열에 다른 타입이 붙으면 결과는 문자열(무조건)
System.out.println(100 + 200 + "world");
System.out.println("hello"+ 100 + 200);
System.out.println("A" + 10);//A10
System.out.println('A' + 10);//75
}
}
연산자(Operator)
: 새로운 내가 될게
- 단항 연산자(Unary Operator)
변수의 앞이나 뒤에 붙어서 변수 값을 하나 증가시키거나, 감소시키는 증/감 연산자(++, --)
양수와 음수를 나타내는 부호 연산자(+, -)
비트의 값을 바꿔주는 비트 반전 연산자(~)
논리대수의 값을 반전시켜주는 논리 반전 연산자(!)
데이터 타입을 바꿔주는 캐스트연산자 ( (type) )
public class OperatorEX01 {
public static void main(String[] args) {
//단항 연산자
int i = -3;
int j = -i;
System.out.println(j);
//++, --
int k = 1;
k++;
System.out.println(k);
k--;
System.out.println(k);
//증감연사자는 a++, ++a 의미가 다름
k = 1;
int h = k++; // 현재의 k값을 먼저 대입(저장)하고 이후에 증가
System.out.println("k값:"+ k);
System.out.println("h값:"+ h);
k = 1;
int g = ++k; // k값을 먼저 증가시키고 이후에 대입
System.out.println("k값:"+ k);
System.out.println("g값:"+ g);
k = 1;
System.out.println(k++);
System.out.println(++k);
System.out.println("--------------------------------------------");
//~연산자 - 2진수값을 반대로
byte b = 10; //0000 1010
System.out.println(~b);//1111 0101
System.out.println(~b + 1);
System.out.println("--------------------------------------------");
System.out.println(!true);//false
boolean bool = !false;
System.out.println(bool);//true
}
}
- 2항 연산자(Binary Operator)
** 연산자가 int형(4byte)보다 작은 크기의 데이터 타입인 경우에
모두 int형으로 자동 형 변환되어 연산을 수행 (boolean형을 제외)
1. 산술 연산자 ( +, -, *, /, % )
2. 비교 연산자 ( <, <=, >, >=, ==, != )
비교 연산자의 결과 값은 크기 값을 비교하여 조건을 만족하면 true 그렇지 않으면 false를 반환
( If 비교되는 숫자의 데이터 타입이 다를 경우 기본적으로 크기가 큰 데이터 타입에 맞추어 비교 연산을 실행 )
3. 비트 연산자 ( &, |, ^ )
& (비트곱): 두 비트가 1일 때 1, 나머지는 0.
| (비트합): 두 비트 중 하나 이상이 1이면 1, 두 비트 모두 0이면 0.
^ (xor 배타적 논리합): 두 비트가 다르면 1, 같으면 0.
4. 비트 이동 연산자 ( <<, >> )
왼쪽 항의 값을 2진수로 변환하여 오른쪽 항의 값만큼 비트를 왼쪽(<<), 오른쪽(>>)으로 이동시키는 연산을 수행
ex) int a = 192;
00000000 00000000 00000000 11000000
a << 3
00000000 00000000 00000110 00000000 //1536
< 헷갈리기 쉬운 연산자 > % : 나머지를 구할 때 쓰는 연산자 / : 몫을 구할 때 쓰는 연산자 |
public class OperatorEx02 {
public static void main(String[] args) {
//2항 연산자 - 항이 2개인 연산자
int i= 7 / 3; // 몫 2
int j = 7 % 3; // 나머지 1
int k = 7 * 3; // 곱 21
//비교 연산자
System.out.println(i == j); //false
System.out.println(i != j); //true
System.out.println(i >= 1);//true
System.out.println(i < j);//false
System.out.println(k != 21);//false
System.out.println(k % 2 != 0);
System.out.println(k % 2 == 0);
System.out.println(k % 7 == 0);//7의 배수
}
}
5. 논리 연산자 ( &, |, &&, || )
& : 연산을 수행하여 양쪽 항이 모두 true일 때만 true를 반환 " and "
| : 연산을 수행하여 양쪽 항 중 한쪽만 true를 만족해도 true를 반환 " or "
&& : 만일 왼쪽 항이 false일 경우에는 오른쪽 항을 수행하지 않고 무조건 false를 반환
|| : 만일 왼쪽 항이 true일 경우에는 오른쪽 항을 수행하지 않고 무조건 true를 반환
- 논리 연산자's Example
public class OperatorEx03 {
public static void main(String[] args) {
int x = 10;
int y = 20;
//if 뒤에는 조건이 온다. true라면 if문 실행, false라면 else문 실행
//&&, ||는 앞항을 검사해서 결과가 정해지면, 뒤를 실행하지 않음
if( x != 10 && ++y ==21 ) { //전자가 무조건적 거짓이기 때문에 후자를 실행 x (결과적으로 거짓이므로)
System.out.println("참입니다.");
} else {
System.out.println("거짓입니다.");
}
System.out.println("x값:" + x + ", y값:" + y);
if( x==10 || ++y == 21) { //전자가 무조건적 참이기 때문에 후자를 실행 x (결과적으로 참이므로)
System.out.println("참입니다.");
}else {
System.out.println("거짓입니다.");
}
System.out.println("x값:" + x + ", y값:" + y);
}
}
6. 대입 연산자(Assignment Operator) : +=, -=, *= , /= , %=
public class OperatorEx04 {
public static void main(String[] args) {
int a = 6;
int b = 5;
a +=3;// a= a + 3
b =+3; // b = +3
System.out.println(a);
a -= 4;
a *= 10;
a /= 3;
a %= 4;
System.out.println(a);
}
}
- 3항 연산자
( 조건식 ? 연산식1 : 연산식2 )
: 조건식의 결과값이 참이면 연산식 1, 거짓이면 연산식 2를 실행
" 조건식에는 boolean형 조건식 "
public class OperatorCondition {
public static void main(String[] args) {
//프로그램에서 랜덤한 값은 유효한 의미를 가짐
//System.out.println( Math.random() ); // 0이상 ~ 1.0미만 랜덤값 출력
//유효한 정수 랜덤값 1~10
int num = (int) (Math.random() * 10) + 1;
System.out.println(num); //1~10
//랜덤값이 3의 배수인지 아닌지를 검사
String result = num % 3 == 0 ? "3의 배수 " : "3의 배수가 아님";
System.out.println(result);
System.out.println("-----------------------------------------------------------");
/*
* 1~100까지 랜덤한 정수를 생성
* 짝수 or 홀수인지 결과 출력
*/
int num1 = (int)( Math.random() * 100 ) + 1;
System.out.println(num1);
//String result2 = num1 % 2 == 0 ? "짝수" : "홀수";
String result2 = num1 % 2 != 0 ? "홀수" : "짝수";
System.out.println(result2);
System.out.println("-----------------------------------------------------------");
/*
* -5~5까지 랜덤한 정수를 생성 (0~10) - 5
* 어떤 정수가 나오든 절대값으로 출력
*
*/
int a = (int)(Math.random() * 11)-5;
System.out.println(a>=0 ? a : -a);
//System.out.println(a<0 ? -a : a);
}
}
계산 순서는 어떻게 될까?
소괄호 > 단항 > 이항 > 삼항 > 대입
'Java 기본 개념' 카테고리의 다른 글
자바를 잡아라 제 6장 - 끝이 어딘지 모를 땐 현재에 집중해라 (2) | 2022.10.06 |
---|---|
자바를 잡아라 제 5장 - 반복만이 살 길이다 (0) | 2022.10.04 |
자바를 잡아라 제 4장 - 세상사 쉬운 건 없다 (0) | 2022.10.03 |
자바를 잡아라 제 3장 - 느릴 순 있어도 놓치는 말자 (0) | 2022.10.03 |
자바를 잡아라 제 1장 - 아무 것도 아닌 것은 없다 (0) | 2022.09.22 |