자바 의 Byte 형식의 연산 디 테 일

2467 단어 Java
먼저 예제 하 나 를 도입 합 니 다.
public	 calss	 Test{
  public static void main(String[] args){
    byte b1=1,b2=2,b3,b6;
    final byte b4=4,b5=5;
    b6=b4+b5;
    b3=b1+b2;
    System.out.println(b3+b6);
  }
}

              :
			  b3=b1+b2    


설명: byte 형식 이 변수 간 의 계산 을 할 때 유형 을 int 형식 으로 올 려 계산 합 니 다.
- - b3 = b1 + b2 에서 b1, b2 는 byte 형 이 고 자바 에서 계산 할 때 그들 을 int 유형 으로 올 려 계산 해 야 합 니 다. b1 + b2 계산 후 int 유형 이 되 었 습 니 다. b3 에 할당 되 었 고 b3 는 byte 유형 입 니 다. 유형 이 일치 하지 않 으 면 컴 파일 이 통과 되 지 않 습 니 다. int 유형 은 byte 유형 에 직접 할당 할 수 없 기 때문에 필요 하 다 면 강 한 전환 이 필요 합 니 다.
그러나 b6 역시 두 개의 byte 에 의 해 할당 되 었 는데, 왜 그것 은 잘못 보고 하지 않 습 니까?
이 유 는 final 에 있 습 니 다. final 에 의 해 수 정 된 변 수 는 상수 입 니 다. 여기 서 b4 는 3 으로 바 꿀 수 있 고 b5 는 4 로 바 꿀 수 있 습 니 다.즉: b6 = 4 + 5;유형 향상 과 관련 되 지 않 고 컴 파일 할 때 b6 = 9 가 되 었 습 니 다.
요약: 자바 의 byte, short, char 는 계산 할 때 int 형식 으로 향상 된다.
상기 몇 가지 예 를 통 해 구체 적 으로 설명 한다.
1. 예 1
byte a=1;
a=a*2;
System.out.println(a);

해석: 자바 에 서 는 byte, short, char 형식의 변 수 는 연산 할 때 자동 으로 int 형식 으로 변 환 됩 니 다.형식 byte a = 1;중 변수 a 는 byte 형식 이지 만, 식 a = a2 에 서 는 a2 가 int 형식 이 고, a 는 byte 형식 이기 때문에 int 형식 에 값 을 부여 하면 byte 형식 에 정밀도 손실 을 보고 하고 컴 파일 오류 가 발생 합 니 다.a = a2;이 식 은 a = (byte) a2 로 바 꿉 니 다.되다(이 동작 은 강전 환 입 니 다)
2. 예 2 (byte 의 넘 침 문제)
byte b=(byte)(123+123);
System.out.println(b);             //-10

왜 결과 가 - 10 일 까요?
  :         ,                 
	int 246        :0000 0000 1111 0110 ,       
	     byte     1111 0110  
 	        ,       ,
	        ,                   1000 1010
	     -10

한 숫자의 패 치 를 알 고 있 는데, 어떻게 그것 의 원 코드 를 구 합 니까?설명: 기호 위치 가 변 하지 않 고 다른 위 치 는 모두 반대 한 다음 에 최종 결과 + 1
3. 예 3
short a = 128 ;
byte b = (byte)a ;
System.out.println(b);         //-128
  :	a         0000 0000 1000 0000,     
	         1000 0000
	           1,      ,
	                    1000 0000
	      -128

여기 서 주의 할 점 이 있 습 니 다. 바 이 너 리 원본 코드 나 8 비트 바 이 너 리 반 코드 의 표시 범 위 는 모두 - 127 ~ + 127 이 고 - 128 을 표시 할 수 없습니다.8 비트 바 이 너 리 패 치 의 표시 범 위 는 - 128 ~ + 127 이 고 그 중에서 - 128 의 8 비트 바 이 너 리 패 치 는 10000000 이다.
4. 예 4
byte a = (byte)(-129) ;
System.out.println(a);       //127
  :a         1000 0000 0000 0000 0000 0000 1000 0001  
      a         1111 1111 1111 1111 1111 1111  0111 1111
          ,   8   ,   0111 1111
           127

좋은 웹페이지 즐겨찾기