黑马程序员技术交流社区

标题: Java 基础 关于 进制强制转换 的讨论 欢迎大神交流 [打印本页]

作者: 0_TNT_0    时间: 2014-12-10 23:22
标题: Java 基础 关于 进制强制转换 的讨论 欢迎大神交流
本人是Java新手一枚,以下是一个byte类型的数据强制转换的Demo源码,有个问题想请教大神
130在内存中是以补码存在的,截取过程是从源码截取后8位,还是转成补码之后再截取后8位?


class VariableDemo3
{
        public static void main(String[] args)
        {
                byte b = 126;
                System.out.println(b);
                byte b2 = (byte)130;
                System.out.println(b2);//-126
                byte b3 = (byte)300;
                System.out.println(b3);//44
        }
}
/*
        第一个:
        byte b2 = (byte)130;
        数据:130默认是int类型的十进制数据。
                第一步:十进制的130转换成二进制数据。
                        128 64 32 16 8 4 2 1
                        1   0  0  0  0 0 1 0
                第二步:130在内存中的表示形式,你做了截取
                        00000000 00000000 00000000 10000010               
                        截取后的结果是:
                                10000010
                第三步:二进制数据是10000010
                        通过观察,我们发现这是一个负数。
                        原码:1 0000010
                        反码:1 1111101
                        补码:1 1111110               
                        最终的结果是:
                                1 1111110
        第二个:
        byte b3 = (byte)300;               
                二进制:
                00000000 00000000 00000001 00101100
                截取后:
                00101100
*/
作者: 慕容冰若    时间: 2014-12-11 21:25
130是正数,它的源码,反码,补码都是一样的啊。。。无论哪个都一样

作者: 0_TNT_0    时间: 2014-12-11 23:22
慕容冰若 发表于 2014-12-11 21:25
130是正数,它的源码,反码,补码都是一样的啊。。。无论哪个都一样

多谢大神指点,我自己当时二了,没想过来。。。
另外弱弱的问下,计算机中整数在运算和存储过程中,都是以补码形式存在么?
作者: 慕容冰若    时间: 2014-12-12 22:46
0_TNT_0 发表于 2014-12-11 23:22
多谢大神指点,我自己当时二了,没想过来。。。
另外弱弱的问下,计算机中整数在运算和存储过程中,都是 ...

是的额。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2