자바에서
byte a = 127 * 2;를 프린트하면 오류가 나는데
int b = 270000000 * 10;을 프린트하면 오류가 안 나고 쓰레기값이 나오는 이유
즉 둘 다 오버플로인데 하나는 오류, 다른 하나는 오류가 아닌 이유
형들도 몰라? 하 대체 이거 이유가 뭐지ㅜ
자바에서
byte a = 127 * 2;를 프린트하면 오류가 나는데
int b = 270000000 * 10;을 프린트하면 오류가 안 나고 쓰레기값이 나오는 이유
즉 둘 다 오버플로인데 하나는 오류, 다른 하나는 오류가 아닌 이유
형들도 몰라? 하 대체 이거 이유가 뭐지ㅜ
해당 댓글은 삭제되었습니다.
아래꺼도 범위 벗어나잖아...
byte a = 4; byte b = 3; 이 때 a+b는 int로 바뀌는 거 이런 거 말하는 거야?
byte a = 12 * 2; 이런 거처럼 리터럴끼리의 연산은 int로 안 바뀌고 오류 없이 계산 되잖아
아니면 내가 모르는 다른 게 있는 건가 자세한 설명 좀 ㅠ
궁금해서 찾아봣는데 java 정수 리터럴은 int 아님 long이고 short이나 byte는 없대
엥 ? byte a = 12 * 2; 이런 건 오류 안 나잖아./.
https://programming.guide/java/int-may-overflow-byte-may-not.html
나도 내가 댓글 달아놓고 안충분한거같아서 더 찾아보고있는중 ㅋㅋ
읽어봤는데 그 내용대로라면 byte b = Byte.MAX_VALUE + 0; 이것도 int로 바껴서 오류나야하는데 내가 해보니 이건 오류 안 나는뎅... 그나저나 답변 달아줘서 고마움 ㅠ
A narrowing primitive conversion may be used if the type of the variable is byte, short, or char, and the value of the constant expression is representable in the type of the variable. 선언한 자료형이 byte, short, char이고 자료형에 저장하려는 값이 해당 변수에 맞는 (가령 signed byte는 -128 ~ 127) 범위에 있을때 컴파일러에서 형축소 자동으로 해준대
니가 쓴 byte a = 12*2는 자료형이 int인 24인데 선언한 변수 a 자료형은 byte이고 24는 byte 범위 안에 있는 값이니까 컴파일러가 자동으로 형축소 해주는거고 Byte.MAX_VALUE + 0 도 마찬가지로 127이니까 자동으로 형축소 되는데
128부터는 byte 범위에 안맞는 값이니까 자동 형축소도 안해주고 그냥 int형인 채로 가는듯 싶음
아직은 잘 이해 안 되는데 이거 보고 이해하려고 노력할게 고마워.. 근데 이런 거 모르는 사람 많으려나?? 기초적인 내용은 아니지?
본인도 잘 몰르겟음 아직 취준생이라 아만보가 안됨 ㅎㅎ;;
근데 딱 하나만 물어보자면 이런 거 구글에 검색해서 찾은 거야? 어떤 식으로 검색해?? 질문하고자 하는 내용을 문장으로 구글에 검색해야 하나.. 아니면 중요 키워드만 검색해야 하나.. 나 이런 거 몰라...
ㅇㅇ 구글 검색하고 본인 이번에 첨엔 "java byte multiple overflow", "java byte type overflow", "java initialize byte variable overflow value" 이런 식으로 찾아보다가 비슷한거 걸리면 좀 검색어 구체적으로 다듬고 이렇게 가는 느낌임
근데 이번엔 걍 컴파일러에서 뱉은 컴파일 에러 메세지 cannot convert from int to byte에 java byte over 이거 추가해서 검색했더니 나왔음 ㅋㅋㅎㅎ
아무튼 고마워!! 취업 화이팅
너도 화이팅하셈 ㅋㅋ