黑马程序员技术交流社区
标题:
关于基本数据转换问题
[打印本页]
作者:
会飞De石头
时间:
2014-5-13 22:26
标题:
关于基本数据转换问题
问题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一样 ,现在想问,还有什么情况下括号的影响可以类似这样忽略呢?
作者:
郝义涛
时间:
2014-5-13 23:04
我在这儿回答问题二:我感觉int a2=(b++);
b++; 相当于 b=b+1;所以原式相当于int a2=b=b+1;
像这样的情况很多,就不举例了,我在这儿只是说明一下,为什么加括号与不加括号是一样的。
作者:
李小新H
时间:
2014-5-14 07:35
同样不懂!求答案!
作者:
假Rǔ有⒈兲
时间:
2014-5-14 17:34
第一个是 long a1=54654
int a2=(int)a1 吧
作者:
土突突
时间:
2014-5-15 01:02
关于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++);
你这个等式右边就一种计算过程。就是自增运算。加不加括号都会进行自增运算。
作者:
会飞De石头
时间:
2014-5-17 09:51
土突突 发表于 2014-5-15 01:02
关于long转换为int的情况。
首先s1-s2=4233600000L,为长整形,在内存中占8个字节。共64位。它的二进制形式 ...
很感谢。受用了
作者:
别小乐
时间:
2014-5-17 10:43
赞一个,赞一个
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2