网上有一个哥们说(byte)128 输出为-28 原因是: 10000000 取反为01111111 我有点迷糊~~ 符号位不是不变吗?到底是不是10000000 在计算机中只会当初-128
解决方案 »
- java 程序编译没出错 运行时出错 功能无法实现
- OSGi相互学习,期待共同讨论
- 如何配置程序?
- 请问,如何处理oracle long raw字段类型
- Java如何使程序窗口始终处于屏幕的最上层?(类似于FlashGet)
- 一个java.lang.Thread类的对象,如果没有变量来引用它了,但是该线程又没有执行完,试问JVM是否会回收该线程对象?
- java 基本 类型
- 关于通讯编程如何建模?
- 拿到java的源代码怎么编译,.class文件怎么打开?
- win7下Android sdk中的draw9patch.bat打开或保存图片抛出异常
- Object是java里的关键字吗
- java 读取txt文本的问题
(byte)128 输出为-128
在System.out.println((byte)128));中128会被认为是int类型
它的补码是 00000000000000000000000010000000 不是10000000
(byte)128的存储为 10000000 而不是 00000000000000000000000010000000
在byte中 10000000(注意这是补码)比较特殊 没有任何源码在转补码时能转换为 10000000(在byte类型中)
人为规定 10000000 就是-128换个一般的例子 存在对应源码的 比如说 System.out.println((byte) 131);输出为多少 这样计算
131 的补码是 00000000000000000000000010000011 从int到byte 去掉前面24个0 得到
(byte) 131的补码是 10000011
(byte) 131的反码是 10000010
(byte) 131的源码是 11111101
在byte中 源码是 11111101 的二进制整数是 -125
所以System.out.println((byte) 131); 输出 -125