当前位置: 首页 > 后端技术 > Java

研究short类型移位问题

时间:2023-04-01 17:53:13 Java

导致第16行:int类型右移一位第19行:short类型输出结果右移一位,int类型为4194303,但short类型仍然是-1问题研究改了如下代码,并顺利输出二进制。可以发现short的-1二进制输出有点问题,长度是32位而不是16位。经过排查,发现我调用的方法只接受int类型的值,所以short会被强行转为int类型,所以输出的二进制是32位的。简化代码。为了更方便的看到简短的处理逻辑,上半部分是编译后的class文件。下面是java虚拟机运行的汇编代码。,iushr,lshl,lshr,lushrCode:6i2s:类型转换,int类型转short类型收窄类型转换指令:i2b,i2c,i2s,l2i,f2i,f2l,d2i,d2landd2fshort类型数据移位时,short会先转换成int类型进行移位操作,等操作完成再转换成short类型。短二=-1;两个>>>=10;对于-1,INT类型为32位1,向右移动10位是:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111索历实交得表部分距照