求java大神告诉我 java中无符号左移或右移 是怎么回事呢? 特别是负数是怎么回事?谢谢了

如题所述

有符号就带符号、没符号就补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的原码.
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-06
改造中的无符号右移的数据是非常重要的。
例如,在字节b;做无符号右移,并在一些哈希,加密,压缩,序列化格式将用于编码的视听媒体。

如果标志的权利,我们需要更多的空间做符号右移。

如字节需要哟INT做,浪费了时间和空间的短,短的。

所谓的“左乘以4(2 ^ 2),移两位除以4”最初成立于unsigned环境。这不仅是因为java的无符号的基础类型,所以你明白签署。
总之,毫无征兆地申请的权利远不止一个标志,以正确的。 。

【JAVA】JAVA中为什么没无符号左移而只有无符号右移
二进制码最高位是符号位,向右移位只会涉及值变换(用0补位),而向左移位,补位时会涉及符号变换问题,所以没有无符号左移。Java小白一只,浅解。

java中右移运算符和无符号右移运算符的区别
右移位运算就是将左操作数的比特位向右移动第二个操作数指定的位数,在二进制中,首位是用来表示正负的,若右移运算符的第一个操作数是正数,就填充0,是负数就填充1;

java>>>什么意思
这是因为在补码表示法中,负数的算术运算可以直接使用二进制位运算进行,而无需进行特殊处理。例如,在32位系统中,-4的二进制补码表示为11111111111111111111111111110100。3、当您使用>>(有符号右移)操作符时,它会将整数的二进制表示向右移动指定的位数,并在左侧插入原始值的最高位(符号位)。这意味...

Java 中“>>”和“>>>”有什么区别?
>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。表达式为:result = exp1 >> exp2;result = exp2 >>> exp2;表示把数exp1向右移动exp2位。例如:res = 20 >> 2;20的二进制为 0001 0100,右移2位后为 0000 0101,则结果就为 r...

关于移位
“ < <”, “> > ”, “> > > ”在Java中是左移、有符号右移和无符号右移运算符。位移运算符只对int值进行操作,如果不是int,编译器会报错。在Java中,一个int的长度始终是32bit,也就是4个字节。比如t> > > n的含义就是把整数t右移n位,高位补上零。所以如果t是个负数,最...

Java中右移运算
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。无符号右移运算符(>>>)>>>运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃 -1>>2 = -1 -1: 原码:1000 0001 反码:1111 1110 补码:1111...

java中>> 和 >>>的区别,为什么没有<<<
一、>> 和 >>>的区别就是有无符号的区别:右移运算符>>(有符号)用来将一个数的各二进制位全部右移若干位.例如:a = a>>2,使a的各二进制位右移两位,移到右端的低位被舍弃,最高位则移入原来高位的值。如:a = 00110111,则a>>2=00001101,b=11010011,则b>>2 = 11110100。无符号右移...

java位移运算符
3) Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0 4)右移一位相当于除以2,左移一位(在不溢出的情况下)相当于乘以2;移位运算速度高于乘除运算。5)位运算符的优先级 ~的优先级最高,其次是<<、>>和>>>,再次是&,然后是^,优先级最低的...

java中位移操作和乘法的区别
ava中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >> 1,相当于num除以2 >>> : 无符号右移,忽略符号位,空位都以0补齐 对于:>>> 无符号右移,忽略符号位,空位都以0补齐 value >>> num -- num 指定要移位值value...

Java中,位运算符>>,右移时左边何时补0,何时补1
防止移动超过long值里现成的位数。但在进行“无符号”右移位时,也可能遇到一个问题。若对byte或short值进行右移位运算,得到的可能不是正确的结果(Java 1.0和Java 1.1特别突出)。它们会自动转换成int类型,并进行右移位。但“零扩展”不会发生,所以在那些情况下会得到-1的结果。

相似回答