java - 为什么(byte)128等于-128
大家讲道理
大家讲道理 2017-04-18 10:10:02
[Java讨论组]
    System.out.println((byte) 128);//-128
大家讲道理
大家讲道理

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

全部回复(3)
阿神

是因为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

高洛峰

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

怪我咯
  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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号