为什么(byte)128等于-128

    System.out.println((byte) 128);//-128
阅读 8.3k
2 个回答

是因为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溢出了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题