java - 为什么(byte)128等于-128
大家讲道理
大家讲道理 2017-04-18 10:10:02
0
3
668
    System.out.println((byte) 128);//-128
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

모든 응답(3)
阿神

은 java의 자동 변환으로 인해 발생합니다.
1. 128은 32비트 정수이며 처음 24는 모두 0이고 마지막 8자리는 10000000입니다. 🎜>
2. (바이트)128의 첫 번째 숫자는 바이트로 변환된 후 1이며, Java는 이를 음수의 보수 식별자로 간주합니다
3. System.out.println이 호출되면 Java 유형 시스템이 자동으로 byte 유형을 int로 변환합니다. 이때 처음 24비트는 모두 1이고 마지막 8비트는 1000입니다. 0000, 이는 여전히 -128입니다.4이므로 출력은 -128
입니다.

팁: Java는 바이트 연산을 수행할 때 자동 유형 변환을 수행해야 하며, 부호 없는 정수를 지원하지 않으므로 일반적으로 자동 확장으로 인해 발생하는 잘못된 비트를 보호하기 위해 & 연산을 사용해야 합니다.

小葫芦

바이트 값 범위는 -128~127, 128 오버플로

刘奇
  1. 128int 00000000 00000000 00000000 10000000 유형의 정수이고, 길이는 32비트

  2. 입니다.
  3. byte 유형 정수의 길이는 8비트이므로 강제 변환 후 마지막 8비트는 10000000

  4. 입니다.
  5. 의 첫 번째 비트는 왼쪽에서 오른쪽으로 부호 비트, 0의 값은 0~127, 1의 값은 -128~-1

  6. System.out.println(int)을 호출하면 Java는 byte -128을 다시 int -128

  7. 으로 변환합니다.
  8. 그래서 (byte) 128 == (int) -128

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿