A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 会飞De石头 中级黑马   /  2014-5-13 22:26  /  1601 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问题1:
                long s1 = 1333641600000l;
                long s2 = 1329408000000l;       
                System.out.println(s1-s2);                //4233600000
                System.out.println((int)(s1-s2));       //-61367296
                               
                System.out.println(14-10); //int 型  结果为4
                System.out.println(14l-10l); //long型  结果为4

现在想问:数据准换时候,特别是long类型向int类型转换时,怎么进行转换的?小白,实在不太懂。

问题2:关于数据类型提升过程中 括号的优先级 问题
                int a = 8;  int b = 8;
               
                int a1 = a++;
                int a2 = (b++);
结果 a1 与a2一样 ,现在想问,还有什么情况下括号的影响可以类似这样忽略呢?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
我在这儿回答问题二:我感觉int a2=(b++);
b++;  相当于 b=b+1;所以原式相当于int a2=b=b+1;
像这样的情况很多,就不举例了,我在这儿只是说明一下,为什么加括号与不加括号是一样的。
回复 使用道具 举报
同样不懂!求答案!
回复 使用道具 举报
第一个是 long a1=54654
             int    a2=(int)a1  吧
回复 使用道具 举报
关于long转换为int的情况。
首先s1-s2=4233600000L,为长整形,在内存中占8个字节。共64位。它的二进制形式在内存中为
00000000 00000000 00000000 00000000 11111100 01010111 10011100 00000000
当long转换为int类型时,由于int只占4个字节,共32位。故会取long类型的后32位存入int类型中。此时int类型的
二进制表示为:   11111100 01010111 10011100 00000000。可以看到首位是1,故该数为负数。
而负数是正数的补码表示。因此可以通过计算该数的补码然后取负就可以得到该负数的值。计算过程如下
  源码:  11111100 01010111 10011100 00000000  (4233600000L的二进制形式)
  反码:  00000011 10101000 01100011 11111111   (源码取反得反码,既0变1,1变0)
  补码:  00000011 10101000 01100100 00000000   (源码加1得补码)
通过计算补码的值为  61367296,取负后为 -61367296。
然后是:
int a = 8;  int b = 8;
int a1 = a++;
int a2 = (b++);
你这个等式右边就一种计算过程。就是自增运算。加不加括号都会进行自增运算。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
土突突 发表于 2014-5-15 01:02
关于long转换为int的情况。
首先s1-s2=4233600000L,为长整形,在内存中占8个字节。共64位。它的二进制形式 ...

很感谢。受用了
回复 使用道具 举报
赞一个,赞一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马