黑马程序员技术交流社区

标题: 关于强制转换的算法问题 [打印本页]

作者: 张权    时间: 2012-11-11 19:16
标题: 关于强制转换的算法问题
class Conversion
{
        public static void main(String[] args)
        {
                byte b;
                int a = 266;
                b = (byte)a;
                System.out.println("byte to int is"+" "+b);
        }
}
我想问下这个是怎么算的? 为什么结果是10
作者: 黑马刘向阳    时间: 2012-11-11 19:23
只给低8位,高8位是256
作者: 冰深    时间: 2012-11-11 19:24
整型数据(4字节表示)266的二进制表示100001010,而byte只有1个字节,只保留后四位的正数,也就是10了~
作者: 张权    时间: 2012-11-11 19:29
冰深 发表于 2012-11-11 19:24
整型数据(4字节表示)266的二进制表示100001010,而byte只有1个字节,只保留后四位的正数,也就是10了~ ...

是不是因为  byte只能装一个字节,所以byte只会取int的一个字节装进自己的内存区?而且在取int类型的时候是从做往右取一个字节?
作者: 冰深    时间: 2012-11-11 19:30
张权 发表于 2012-11-11 19:29
是不是因为  byte只能装一个字节,所以byte只会取int的一个字节装进自己的内存区?而且在取int类型的时候 ...

这其实就是截断,也可这么说吧
作者: 葛旭东    时间: 2012-11-11 19:35
这是向下转型的数据丢失问题,强制转换容易造成数据丢失或者精度变化。
作者: 张权    时间: 2012-11-11 19:36
嗯!!谢谢各位的回答!!
作者: xiaozhang    时间: 2012-11-11 19:48
byte 只有一个字节8位 截取int的后八位100001010不就是10么 用16进制 更容易看  266用int表示16进制是0000010A  而byte取其后八位的16进制是0A 也就是10进制的10


作者: 张综    时间: 2012-11-11 20:33
byte只有1个字节,只保留后四位的正数,截取int的后八位100001010,二进制换成十进制就是十了
作者: 聽聽我dē❤    时间: 2012-11-11 20:41
byte占一个8位,int是占4个八位,把4个八位的int变量强制转换给一个8位的byte类型的变量,所以会失去精度,将266转换为二进制是100001010,取后4位就是1010,然后转换为十进制就是10了。




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