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