예시로
byte a = 3;
byte b = 4;
byte c = a + b;
이게 컴파일ㅇ ㅗ류가 뜸.
바이트간 연산은 인티저연산으로 대체가 되고, 따라서 덧셈결과가 인티저가 되어서 인티저는 바이트보다 크기가 크니까 자동형변환이 안되어서 생기는 문제임.
그래서 byte c = (byte) (a + b); 라고 써야돼.
근데 내 의문점은 이거임
byte c = 3 + 4; 라고 쓰면 컴파일오류가 안뜸. 왜그러지? 3 + 4도 인티저 아닌가??
예시로
byte a = 3;
byte b = 4;
byte c = a + b;
이게 컴파일ㅇ ㅗ류가 뜸.
바이트간 연산은 인티저연산으로 대체가 되고, 따라서 덧셈결과가 인티저가 되어서 인티저는 바이트보다 크기가 크니까 자동형변환이 안되어서 생기는 문제임.
그래서 byte c = (byte) (a + b); 라고 써야돼.
근데 내 의문점은 이거임
byte c = 3 + 4; 라고 쓰면 컴파일오류가 안뜸. 왜그러지? 3 + 4도 인티저 아닌가??
컴파일된 코드엔 7로 들어갈꺼임ㅇㅅㅇ
리터럴 7 이란건가? 사실 자바에는 리터럴들이 L 명시 하지 않으면 전부 인티저인거같은데, byte a = 3; 부터 의문점을 제기해야하는거 아니었나 싶음
나 자바 언어공부 이제 막 시작했는데.. 자바에는 unsigned 도 없고... 좀 독특하네??
바이트코드 뜯어보면 좀 다르려나
딱국아 csapp 읽어봤냐? 읽어볼라하는데
ㅇㅇㅇ 읽어봐
근데 흠.... 내가 느끼기에 그 책은 좀 그거임. 내가 쓰는 C코드의 작동원리를 샅샅이 파헤치자!!! 그런 의문점을 가지고 있으면 좋은 책이야
그렇군
Integral literals와 Integer class 30초만에 구글링 성공했는데 좀 찾아봐라
컴파일과정에서 int값으로 자동으로 변환되기 때문에 처음부터 (byte)로 명시해서
"야 컴파일러야. int값으로 바꾸지 마라. 걍 byte로 놔둬"라고 명령을 줘야되는거다. 왜 그런지 묻지마라 그냥 JAVA의 규칙이다.
자바는 int이하에는 +연산이 정의가 아예 되어있지가 않아용. 그래서 int이하의 자료형의 경우 자동으로 int형으로 업캐스팅해서 더하게 되어있답니다