package 강의자료.소스코드.ch03_연산자;
public class ex09_이항연산자_특징_byte {
public static void main(String[] args) {
byte a = 10;
byte b = 30;
byte c = (byte)(a * b); // byte + byte - > int * int -> int 로 변환됨
// int c = (byte)a * b; // byte + byte - > int * int -> int 로 변환됨
System.out.println(c); // 300이 byte의 범위를 넘어가기 때문에 데이터 손실이 발생하여 44가 저장됨
}
}
300은 10진수로 표현된 값입니다.
10진수 300을 2진수로 변환합니다.
300을 2진수로 변환하면 100101100이 됩니다.
byte는 8비트로 표현되는 데이터 타입입니다.
300의 이진 표현인 100101100은 9비트로 표현되므로 8비트로 축소해야 합니다.
오른쪽에서부터 8비트만을 선택하여 취하고, 나머지는 버립니다.
100101100에서 마지막 8비트인 00101100을 선택합니다.
byte는 부호 있는 데이터 타입이므로, 최상위 비트를 부호 비트로 사용합니다.
00101100의 최상위 비트는 0입니다. (양수를 나타냄)
최종적으로 양수인 00101100를 10진수로 변환하면 44가 됩니다.
따라서, 300을 byte로 변환하면 44가 됩니다.