본문 바로가기
java

22.10.27 변수 타입(크기), 반복문

by SoulMania 2023. 2. 12.

Ex03.java
0.00MB
Ex04_while.java
0.00MB

- 변수 타입 및 크기, 형변환에 관한 개념
8bit -> 1byte
1bit는 이진수 1자리
1byte는 8자리


큰것에서 작은것으로 변환할때 강제 형변환 하는것. (안담기는것을 강제로... 캐스팅)
작은 타입이 큰 타입으로 가는것 어떤걸 써도 상관없는 상황.. 이런것이 자동형변환 (프로모션)

아래는 프로모션
byte -> short -> int -> long -> float -> double

float double은 실수

long이 8바이트고 float가 4바이트이지만 float를 더 큰 타입으로 본다.

따라서 
byte -> short -> int -> long -> float -> double 로 표현

byte, short, int, long 은 정수

1하고 1.0하고 같은 수지만 타입은 다르다. 1은 정수 1.0은 실수

- eclipse 단축키
 한줄삭제 컨트롤 + D 
 여러줄 삭제 블록잡고 컨트롤 + D 

 

 

 

 

---------------------------------변수 타입에 관한 실습 코드---------------------------------------

package pro1;

//byte -128 ~ 127
package pro1;

//byte -128 ~ 127
public class Ex02 {

public static void main(String[] args) {

                //byte타입의 변수 v1에 -128초기값 할당
                byte v1 = -128;
                System.out.println("v1 = " + v1);

                byte v2 = 127;
                System.out.println("v2 = " + v2);

                //int v3 = 128; 되는상태 프로모션
                //byte v3 = (byte) 128; 되는상태 캐스팅-->강제형변환
                //byte v3 = 128; -->안되는 상태
                //Type mismatch: cannot convert from int to byte --> 인트를 바이트로 변환할수 없다라는 뜻. 128은 바이트에 안
                       들어가니 int로 넣어야한다.

/*기본타입 8가지
 * 정수 byte 1byte < short 2byte < int 4byte < long 8byte
 * 실수 float 4byte < double 8byte
 * boolean():true, false  1byte
 * char 2byte
 */


//char타입의 변수 c1에 'A' 할당
//char타입의 변수 c2에 'a' 할당
//char타입의 변수 c11에 'ㄱ' 할당

                System.out.println("-----------------");
                char c1 = 'A';
                int v0 = (int)c1;
                char c2 = 65; // A 아스키 코드로 사용, 캐릭터는 10진수 16진수로 처리되기 때문에 정수를 캐릭터에 넣어도
                                       된다.(이러한 아스키코드값을 알아두면 좋다.)
                char c11 = 'a';
                char c12 = 97; //a 아스키 코드로 사용, 캐릭터는 10진수 16진수로 처리되기 때문에 정수를 캐릭터에 넣어도 
                                          된다.(이러한 아스키코드값을 알아두면 좋다.)
                char c21 = 'ㄱ';
                System.out.println("c1 = " + c1);
                System.out.println("(int)c1 = " + (int)c1); // 캐릭터 타입에  A인 문자가 들어가 있지만 int형으로 강제 형변환
                                                                                하여 아스키코드값에 해당하는 65출력
                System.out.println("(int)c1 = " + v0); // 위와 동일 한 65출력 위에 변수v0에 강제 형변환된 c1을 저장해놨기 
                                                                             때문에 v0출력해도 된다.
                System.out.println("c2 = " + c2);
                System.out.println("(int)char = " + (int)c2); //캐릭터 값에 해당하는 아스키코드가 있지만 굳이 정수타입으로 보고
                                                                                    싶다고 뜻하는 강제 형변환
                System.out.println("c11 = " + c11);
                System.out.println("c12 = " + c12);
                System.out.println("c21 = " + c21);

                //특히 아스키코드 대문자 숫자에 +32를 하면 소문자로 변환된다.


                int i1 = 65;
                char i2 = (char)i1; //int타입 변수 i1의 값을 char타입 변수에 저장
                System.out.println("i2 = " + i2); //A 라고 캐릭터형으로 출력!!!
                //연산식에서 자동타입변환(p.57~59) int+int=int, short+int=int 이것은 쇼트가 인트로 자동타입변환되어 인트화
                     된다.인트에 넣으면 된다.
                //즉 int보다 작은 byte, short, char, int 은 모두 int화되는 자동형변환된다. 이것이 +=/*% 등과 같은 연산에서만 
                   이런 동작을 한다. --->인트가 기준... 이 연산시에 인트보다 작으면 모두 인트로 강제 형변환

                System.out.println((char)i1+32); //A+32 //char(2byte)+int(4byte) 이럴땐 캐릭터가 인트보다 작아서 더 큰 인트
                          형태로 자동 형변환되어 int+int가 되어버린다.(이것이 프로모션) 즉 65+32가 되어버려서 97 출력
                System.out.println((char)(i1+32)); // 따라서 위와같이 자동형변환되지 않으려면 괄호로 묶어야한다. 
                                                                        출력 a (i1+32) -> 65+32 -> 97 -> (char)97 -> a
                System.out.println((char)(i2+32)); //이렇게 해도 되긴하는데 이건 내가 그냥 해본것 a출력

                //즉 int보다 작은 byte, short, char, int 은 모두 int화되는 자동형변환된다. 이것이 +=/*% 등과 같은 연산에서만 
                                   이런 동작을 한다. --->인트가 기준... 이 연산시에 인트보다 작으면 모두 인트로 강제 형변환

                byte b1=1;
                byte b2=2;
                //b1+b2의 결과는 어떤 데이터타입 변수에 저장 할 것인가?
                int result1=b1+b2; // + 연산에서 int보다 작은 바이트는 int로 자동 형변환되어 int+int 연산이므로 최소 int로 선언
                                                   해야한다.
                System.out.println("result1 = " + result1);

                long result2=b1+b2; // int이상인 데이터 타입에 저장가능하다. 
                System.out.println("result1 = " + result2);

                float result3=b1+b2; // int이상인 데이터 타입에 저장가능하다. 
                System.out.println("result1 = " + result3);

                double result4=b1+b2; // int이상인 데이터 타입에 저장가능하다. 
                System.out.println("result1 = " + result4);
                }

}

 

 

 

---------------------------------반복문, 조건문에 관한 실습 코드 if, for---------------------------------------

package pro1;

/* for반복문
 * for(초기화; 조건; 증감식){
  //조건만족시 반복실행코드
 }
 */


//조건문-if문, else if문
/*if문
 * if(조건){
  //조건만족시 실행코드
 */
public class Ex03 {

public static void main(String[] args) {
//10 9 8 7 6 출력
//int i=10; //전역변수라서 다른곳까지 모두 영향을 주기 때문이다. 따라서 다른것으로 선언
int a=10;
for(   ;   ;   ) { 
if(a>5) {
//실행코드
System.out.println(a);
a--;
}else{
//a>5 조건만족x 실행코드
System.out.println("else 안");
break;//for 반복문 종료
}//if끝
System.out.println("if밖이면서 for안");
}//for끝

System.out.println("---");


//5 4 3 2 1 세로 출력
for(int i=5; i>=1; i--) { // i>=1 or i>0

System.out.println(i);
}

System.out.println();
System.out.println("---");

for(int i=0; i<=4; i++) { // i<=4 or i<5 

System.out.print(i+" ");

} //0 1 2 3 4 가로 출력 
  //로컬변수 이기 때문에 똑같이 i를 사용해도 무방.
System.out.println();

System.out.print("\n"); //이렇게 해도 무방

 

System.out.println("---");
for(int i=1; i<=5; i++) { //첫 실행 할 때 조건문 만족 시(true) 증가식을 실행하지 않고 밑에 실행코드 실행
System.out.println(i+"번째 실행");
}

System.out.println("for밖");
//System.out.println(i);
//이 영역에서는 i를 알 수 없다. i cannot be resolved to a variable
//for구문을 벗어나면 i를 인식 할 수 없다.

 

for(int i=5; i>=0; i--) {
for(int j=1; j<=i; j++) {

    System.out.print("★");

}
System.out.println();
} //내가 그냥 해본 것 --> 역 삼각형 별



}//main()메소드 끝

}//class 끝

 

 

 

---------------------------------반복문, 조건문에 관한 실습 코드 for, while, do while---------------------------------------

 

package pro1;
//반복문-for, while, do while
/* for반복문
* for(초기화; 조건; 증감식){
//조건만족시 반복실행코드
}
*/

/*while문
 * while(조건){
 /조건만족시 반복실행코드
 }
 */


public class Ex04_while {

public static void main(String[] args) {

for(int i=1; i<=5; i++) {
System.out.println(i);
}
System.out.println("================");

// 11 12 13 14 15 출력
int i = 11; //지역변수는 무조건 초기값을 주어야 한다. 대신 전역변수는 안줘도 된다. 이것을 변수 초기화라 한다. 이니셜라이즈
while(i<=15) {
System.out.println(i);
i++;
}

System.out.println("================");
int a = 21; //지역변수는 무조건 초기값을 주어야 한다. 대신 전역변수는 안줘도 된다. 이것을 변수 초기화라 한다. 이니셜라이즈
while(a<26) { //(a!=26) 26과 같지 않을때 라는 뜻, true 무조건 돌게하는것(안에 조건문이 26<26이 되면 false가 된다.)
if(a<26) { //(a!=26), a<26
System.out.println(a);
a++;
}else {
break;
}
}
System.out.println("종료");


}

}