Java中Short类型转换为Int类型是如何计算的?原码、反码、补码是什么?

前言

今天在复习Java基础时,遇到了一个问题,这也是为以前没学好Java基础和计算机组成原来补的一个坑。web

问题

在这里插入图片描述
在这里插入图片描述

为何将 int 类型的12312341强转为 short 类型后,输出会是 -8427呢,而262199强转后却变成了55。再一顿查找计算机组成原理书后,终于恍然大悟。svg

解析

首先 int 类型是占32位,而 short 类型是占16
在计算机中表示的带符号的二进制数称为“机器数”,而机器数有3中表示方法:原码、反码、补码
而计算机都是用补码进行运算的
所以,咱们在int强转为short时,就是截取int类型数值的低16位,再将其转换为补码xml

详细过程:blog

例1:12312341转换为short类型图片

在这里插入图片描述
取其低16位为:1101 1111 0001 0101it

负数的反码是在其原码的基础上, 符号位不变,其他各个位取反
而负数的补码就是在其反码的基础上+1基础

所以其补码为 1010 0000 1110 1011,转换为10进制就是 -8427原理

在这里插入图片描述

例2:262199转换为short类型webkit

在这里插入图片描述
取其低16位为:0000 0000 0011 0111二进制

正数的反码和补码都和原码同样

所以其补码为0000 0000 0011 0111,转换10进制就是55

总结

继续复习Java基础吧!