求java大神告诉我 java中无符号左移或右移 是怎么回事呢? 特别是负数是怎么回事?谢谢了
发布网友
发布时间:2022-04-26 19:45
我来回答
共2个回答
热心网友
时间:2023-10-25 08:31
有符号就带符号、没符号就补0。
转成2进制,或者自己用筷子摆几下,就清楚了。
借个别人写好的了
右移
System.out.println(-3>>1);结果是-2,为什么会是-2呢?下面我们来看一下.System.out.println(Integer.toHexString(-3));得到-3的16进制为fffffffd(此为-3的补码,计算机中负数用补码表示).转换成2进制为
1111 1111 1111 1111 1111 1111 1111 1101
右移一位为
1111 1111 1111 1111 1111 1111 1111 1110
,显而易见此为-2补码.
左移
System.out.println(-3<<1);左移相对来说比较简单.1111 1111 1111 1111 1111 1111 1111 1101左移一位为1111 1111 1111 1111 1111 1111 1111 1010,其为-6的补码.
无符号右移System.out.println(-3>>>1);1111 1111 1111 1111 1111 1111 1111 1101无符号右移,高位补0,01111 1111 1111 1111 1111 1111 1111 1110,其为2147483646的原码.
热心网友
时间:2023-10-25 08:32
改造中的无符号右移的数据是非常重要的。
例如,在字节b;做无符号右移,并在一些哈希,加密,压缩,序列化格式将用于编码的视听媒体。
如果标志的权利,我们需要更多的空间做符号右移。
如字节需要哟INT做,浪费了时间和空间的短,短的。
所谓的“左乘以4(2 ^ 2),移两位除以4”最初成立于unsigned环境。这不仅是因为java的无符号的基础类型,所以你明白签署。
总之,毫无征兆地申请的权利远不止一个标志,以正确的。 。