本帖最后由 王梁星 于 2012-11-9 22:16 编辑
一个很简单很随意的例子:- class PrecisionIntToByte{
- public static void main(String[] args){
- int i=177;
- byte b=(byte)i;
- System.out.println(b);
- }
- }
复制代码 结果是,b=-79
为什么是-79。
我想到byte范围是:-128~127,那么溢出177-127=50.50的二进制是:110010.
然后呢,怎么考虑?
我写的证明,但还是不甚明了:- class PrecisionIntToByte{
- public static void main(String[] args){
- int i=-179;
- System.out.println(i+" binary is "+Integer.toBinaryString(i));
- byte b=(byte)i;
- System.out.println(b);
- System.out.println(b+" integer is "+Integer.toBinaryString(b));
- }
- }
复制代码 运行结果是:
-179 binary is 11111111111111111111111101001101
77
77 integer is 1001101
如二楼王振同志说的:
byte占一个字节,共8个二进制位。而-179对应的二进制超出了八位。所以,byte b=(byte)i;的结果取-179对应二进制的最后八位01001101,0忽略,写作1001101,己十进制的77。
若i是整数,同理
|