搜索

首页  >  问答  >  正文

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

    System.out.println((byte) 128);//-128
大家讲道理大家讲道理2904 天前669

全部回复(3)我来回复

  • 阿神

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

    是因为java的自动转型导致的,原理如下:
    1、 128为int整数32位,前24为全部为0 后8位是1000 0000
    2、(byte)128 转型为byte后首位是1,java认为是负数的补码标识
    3、 在System.out.println调用时,java类型系统会自动将byte类型转换为int,此时进行的是有符号左移操作,前24位全部为1,后8为位1000 0000,仍然是-128.
    4、所以输出的为-128

    tip:java在做字节操作的时候应为会发生自动的类型转换,又不支持无符号整数,要特别注意,通常需要使用 与& 操作屏蔽掉自动扩展导致的错误的bit

    回复
    0
  • 高洛峰

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

    byte的取值范围是-128~127, 128溢出了

    回复
    0
  • 怪我咯

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

    1. 128 是一个 int 类型整数 00000000 00000000 00000000 10000000, 长度为 32128 是一个 int 类型整数 00000000 00000000 00000000 10000000, 长度为 32

    2. byte 类型整数长度为 8 位, 所以强制转换后为最后 810000000

    3. 从左往右第一位为符号位,0 时值为 0~1271 时值为 -128~-1

    4. 调用 System.out.println(int) 时 Java 把 byte -128 转回 int -128

    5. 所以 (byte) 128 == (int) -128

    byte 类型整数长度为 8 位, 所以强制转换后为最后 810000000🎜🎜 🎜🎜从左往右第一位为符号位,0 时值为 0~1271 时值为 -128~-1🎜🎜 🎜🎜调用 System.out.println(int) 时 Java 把 byte -128 转回 int -128🎜🎜 🎜🎜所以 (byte) 128 == (int) -128🎜🎜 🎜

    回复
    0
  • 取消回复