정밀도

float는 정밀도가 낮으므로 사용시 조심해야 한다.

같은 값들을 표현한 것처럼 보이지만 실행시에

float의 2_000_000_050 값은 2000000000.00 으로 표현되기 때문이다.

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0702_Ex08_boolean  (0) 2021.07.04
0702_Ex07_DataType  (0) 2021.07.04
0702_Ex05_DataType  (0) 2021.07.04
0702_Ex04_Literal  (0) 2021.07.04
0702_Ex03_DataType  (0) 2021.07.04

실수형 자료형, 리터럴, 형 변환

float 는 단정도형 실수를 표현하는 자료형으로 4byte

double 은 배정도형 실수를 표현하는 자료형으로 8byte

a = 0;을 넣으면 int는 float로 자동 변환되어 저장이 된다.

a = 0.5f; 는 f를 붙여서 리터널을 표시해준 것이다.

char는 float에 대입할 때 자동으로 float로 형 변환이 된다. A의 값은 65.

 

double 을 float에 넣으려면 형 변환 (float)를 해줘야 한다.

 

 

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0702_Ex07_DataType  (0) 2021.07.04
0702_Ex06_Precision  (0) 2021.07.04
0702_Ex04_Literal  (0) 2021.07.04
0702_Ex03_DataType  (0) 2021.07.04
0702_Ex02_Scanner.java  (0) 2021.07.04

정수형 리터럴

d0b는 2진수를 나타낸다.

0은 8진수를 나타낸다.

0x는 16진수를 나타낸다.

_는 각 자리값을 구분한다.

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0702_Ex06_Precision  (0) 2021.07.04
0702_Ex05_DataType  (0) 2021.07.04
0702_Ex03_DataType  (0) 2021.07.04
0702_Ex02_Scanner.java  (0) 2021.07.04
0702_Ex01_Scanner.java  (0) 2021.07.03

이번에는 자료형에 대해서 알아보겠다.

byte 는 -128에서~127까지 나타내는 자료형이다.

1byte 는 8비트로 표현하는데 1비트는 부호를 나타내고 나머지 7비트로 숫자를 나타내기 때문에 -128~127를 나타낼 수 있는 것

 

따라서 

b2 = 200; 을 주면 표현 범위를 벗어나기 때문에 표현할 수 없다.

 

short 타입은 2byte 자료형이다. 

문자 A는 65를 나타냄.

c는 아스키 코드값으로 99를 나타낸다.

 

char는byte와 비교불가함!!

문자는 단 한 개를 말하는 것이고 ''으로 표현함. 문자열은 0문자 이상을 말하고 ""로 나타냄.

 

int 타입은 4byte자료형이다.

자바는 int형이 연산을 위한 기본 타입이다.

b2 = i1; 컴파일 오류가 발생한다. 큰 자료형(int 4byte)은 작은 자료형(byte 1byte)에 대입이 불가하다.

b2 = (byte)i1; 처럼 int를 byte로 형 변환을 시키면 대입할 수 있다. 하지만 i1의 값은 150이므로 표현값(-128~127)을 넘어가기 때문에 overflow가 발생한다. 즉 150은 1001 0110인데 앞에 1은 부호를 나타내는 것이고 음수를 컴퓨터가 저장할 때는 2의 보수로 저장하기 때문에 1110 1010으로 저장이 되는 것. 그래서 -106가 나옴.

 

'1' 문자 1을 말하는 것이기 때문에 해당 숫자는 49이고 '3'은 문자 3이기에 51. 따라서 i3은 100이 나온다.

ㅇ'c'는 99.

 

long은 8byte 자료형이다.

 

long a1 = 10; 이면 int를 long에 대입하는데 작은 자료형은 큰 자료형에 대입할 수 있음. 자동으로 형 변환이 일어난다.

long a2 = 2300000000; 를 넣으면 컴파일 오류가 생기는데, int형의 범위를 벗어나기 때문이다. int형은 4byte로 32비트로 표현할 수 있는 숫자가 대략 -21억~21억 이기 때문임. 

따라서 a2 = 2300000000L; 을 붙이면 long 리터널로 표현해야한다.

리터럴은 그 값이 한 번 정의되면 프로그램이 실행되는 도중에 변하지 않는 값을 말함.

 

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0702_Ex05_DataType  (0) 2021.07.04
0702_Ex04_Literal  (0) 2021.07.04
0702_Ex02_Scanner.java  (0) 2021.07.04
0702_Ex01_Scanner.java  (0) 2021.07.03
0701_Java print문  (0) 2021.07.03

여기서는 nextLine 에 대해서 알아보았다.

nextline은 공백을 읽을 수 있다. 또, 엔터를 읽고 버리는 역할을 한다.  nextInt는 숫자를 입력 받는다.

따라서 위 코드를 실행했을때. 나이를 적고 엔터를 치면 생년월일 ? 을 묻는 질문에 엔터가 입력이 되는 것. 

이렇게 된다.

따라서 나이를 받은 후에 엔터를 입력받은 것을 버려주는 nextLine을 넣어주어야 한다. 

 

age = nextInt();

이 후에 엔터를 읽고 버려주는

sc = nextLine(); 을 써 넣어준다.

 

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0702_Ex04_Literal  (0) 2021.07.04
0702_Ex03_DataType  (0) 2021.07.04
0702_Ex01_Scanner.java  (0) 2021.07.03
0701_Java print문  (0) 2021.07.03
0701개강 첫 날_Java Print문  (0) 2021.07.02

오늘은 이것저것 진도를 많이(?)나갔다. 

Scanner는 키보드의 입력을 받게 해준다.

위에 import java.util.Scanner;이 들어가 있어야 된다. 

사용자의 이름, 나이, 성별, 키를 입력받아 표시하도록 해보았다.

키보드로 입력을 받아 화면에 표시하는 것을 배웠다.

마지막에는 sc.close(); 를 꼭 붙여야 함.

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0702_Ex04_Literal  (0) 2021.07.04
0702_Ex03_DataType  (0) 2021.07.04
0702_Ex02_Scanner.java  (0) 2021.07.04
0701_Java print문  (0) 2021.07.03
0701개강 첫 날_Java Print문  (0) 2021.07.02

System.out.printf("%x\n", 437);

System.out.printf("%X\n", 437);

%x 와 %X 모두 437을 16진수로 표현하라는 의미. 알파벳을 소문자로, 대문자로 하냐의 차이이다.

System.out.printf("%#X\n", 437);

%X 사이에 붙은 #는 출력된 값이 16진수 임을 표현해주는 값.

System.out.printf("%#8X\n", 437);

8칸을 할당한다.

System.out.printf(%o\n", 10);

%o는 8진수로 값을 표현하라는 의미이다.

System.out.printf("%c\n", '\u0041');

<<문자열(여러 개, 공백가능)을 나타낼 때 큰 따옴표"" 사용>> c는 문자의 의미. 

<<문자(한 개, 공백불가)를 나타낼 때 작은 따옴표'' 사용>>

'\u0041' 은 유니코드의 0041에 해당하는 문자를 나타낸다. 

%c %C는 소문자 대문자의 차이.

 

소문자s는 대문자를 소문자로 바꾸지는 않는다.

System.out.printf("%s\n", "Korea");

대문자S는 소문자를 대문자로 바꿔준다.

System.out.printf("%S\n", "korea);

System.out.printf("%10.3s\n", "korea");

10칸을 할당하고 3개만 표시해라(왼쪽부터)

 

숫자 3개 마다 콤마를 자동으로 붙인다.

System.out.printf("%,d\n", 1234567);

 

System.out.printf("%c %c %c %c %c\n", 'a', 'b', 'b', 'a', 'b');

System.out.printf("%1$c %2$c %2$c %1$c %2$c\n", 'a', 'b');

1$는 뒤에 첫 번째 있는 것을 할당한다는 의미.

따라서 두 문장의 실행값은 같다.

 

위에 문장들을 실행한 결과. 

8진수도 표현해주고 싶어서 #를 넣어보았다.

012 라고 뜸. 아마 이게 8진수로 표현했다는 표시인건가?

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0702_Ex04_Literal  (0) 2021.07.04
0702_Ex03_DataType  (0) 2021.07.04
0702_Ex02_Scanner.java  (0) 2021.07.04
0702_Ex01_Scanner.java  (0) 2021.07.03
0701개강 첫 날_Java Print문  (0) 2021.07.02

7월 1일
쌍용교육센터에서 개강한 국비교육을 듣게 되었다.

첫 날 Zoom수업을 통해 (인원을 나눠서 현장으로 수업을 들으러 간다.)
Java설치와 Eclipse설치를 도와주셨다. Java에 대한 설명과 주로 print문에 대해 배웠다.

아직 public class란 것이 무슨 개념인지 자세히는 모르겠다. (컴퓨터일반관련 공부를 했지만 개념적으로만 그런거구나 하는 정도라서 ...)

print와 printf의 차이를 알아보기 위해 수업 중에 선생님께서 적어본 것들.

\t : Tab키 역할
\n : 출력 후 라인을 넘긴다.
System.out.println("\nSpring"); 은 라인을 넘기고 Spring을 출력 하고 라인을 넘긴다.

숫자 + 문자열 = 문자열 이라고 적어놓은 것은 왜 적어놓은지 모르겠다. 걍 틀린 정보인 것 같음. 아니면 선생님께서 말씀하시는 것을 내가 잘못 받아적었거나.
여기서는 printf(format)을 적용해서 출력해보았다. %는 나머지를 구하는 연산자이고 %d는 decimal 십진법으로 표현하라는 것. 큰따옴표 안에서 연산기능을 하려면 두 개를 적어야 했다.
System.out.printf();와 System.out.format();이 서로 같은 의미라고 하셨다.


이부분은 혼자 다시 notepad를 이용해서 적고 cmd를 이용해서 실행해보았다.

수업시간에 썼던 그대로 class를 정의했었는데 Ex02_printf 로 해놓고 파일이름은 Ex01_printf로 해놔서 자꾸 실행이 안돼고 오류가 떠서 뭐지??? 했다. 선생님께서 cmd를 이용해서 class파일로 바꾼 후 java로 실행하는 것을 초반에 보여주셨었는데, 예전에 혼자 파이썬 공부를 했을 때도 이렇게 실행했고 그냥 혼자 복습하는 거라서 이걸로 해보았다.

중간에 주석을 달아 놓은 것이 뭔가 오류가 있어서 그냥 그 줄을 뺐다.

오류를 고쳐서 java compiler로 class 파일을 만들고 파일이름도 Ex02였던 것을 01로 바꾸고 java로 실행시켜 보았다. 실행 성공~

%f는 소수점을 6자리까지 표시하라는 의미이다.

다시 저장하고 컴파일러 돌려주고 java로 실행 해보니 15.4를 소수점 6자리까지 표현하면 15.400000 로 바르게 표기가 되었다.


%f 와 %g 를 비교해 보기위해 돌렸는데, %g는 소수자리가 3개까지만 나와야되는데 왜 4개까지 나온건지....eclipse로 선생님과 함께 했던 것을 작동시켰을 때는 잘나왔는데. 흠

여기서는 123.200으로 3번째 자리까지 잘 나온다.

System.out.printf("%10.5g\n, 123.567);
%10 // 10칸을 할당하고 .5g 유효자리 5개만 찍는다.

System.out.printf("%e\n", 12345.0e-03);
%e는 소수점 이하 6자리까지 표현한다. 12345.0e-03은 실은 12.3450을 나타내는 것?아닌가? 이게 왜 1.234500e+01이 되는거지?
>>12.3450을 지수표현으로 바꾸면 1.23450e+01인데 소수자리를 여섯자리까지 표시할 수 있으므로 1.234500e+01가 되는 것임.


System.out.printf("%e10.3e\n", 12345.0e-03);
12.345를 나타내는 것이고 지수표현으로 바꾸면 1.2345e+01인데 소수자리를 세자리까지만 표시할 수 있으므로 마지막을 반올림해서 1.235e+01인 것.

이부분은 진짜 헷갈린다 근데 %g는 오차가 심해서 실제로는 많이 사용하지 않는 다고 한다.

--복습 62줄까지--

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0702_Ex04_Literal  (0) 2021.07.04
0702_Ex03_DataType  (0) 2021.07.04
0702_Ex02_Scanner.java  (0) 2021.07.04
0702_Ex01_Scanner.java  (0) 2021.07.03
0701_Java print문  (0) 2021.07.03

+ Recent posts