搜尋

首頁  >  問答  >  主體

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

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

全部回覆(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, 长度为 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

    回覆
    0
  • 取消回覆