java中long转int的原理

long转为int需要强转都很熟悉,那么介绍一下强转的具体原理。

首先在计算机中,计算加法减法是用补码计算的。

正数的补码为其二进制表示。负数的补码为其模的二进制表示取反加一。

加入为八位二进制加法,如:+3+(-5) 

+3的补码为00000011

-5的模为+5,二进制表示为00000101,取反为11111010,加一后为11111011,所以-5的补码为11111011


加法计算公式为:两个数的补码相加,如果是正,则直接输出,如果是负,则除符号位以外取反加一

+3和-5的补码之和为11111110,为负数,去掉符号位第一位 1 ,剩下1111110,取反加一后为10

10为十进制中的2,所以带上符号位为-2。


众所周知,java中long为8字节64位,int为4字节32位。

java如果long强转为int,做的事为:直接取低位32位作为值,但是看做补码。


代码如下:

long  long= 37444124124l;

System.out.println((int)long);

输出值为-1210581540

首先37444124124 转为二进制为

100010110111110101111111110111011100


后32位为:10110111110101111111110111011100

这个后32位直接当做计算结果输出:符号位为1,则是负数,负数取后31位取反加一

1001000001010000000001000100100

为:1210581540

加上符号位为-1210581540



猜你喜欢

转载自blog.csdn.net/gdhgr/article/details/79604250