찾다

 >  Q&A  >  본문

java - 为什么(byte)128等于-128

    System.out.println((byte) 128);//-128
大家讲道理大家讲道理2916일 전675

모든 응답(3)나는 대답할 것이다

  • 阿神

    阿神2017-04-18 10:12:02

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

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-18 10:12:02

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

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-18 10:12:02

    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

    회신하다
    0
  • 취소회신하다