JAVA中为什么没无符号左移而只有无符号右移

2020-11-22 21:18:05 字数 3968 阅读 5912

1楼:

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

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

2楼:匿名用户

有符号就带符号、没符号就补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的原码.

3楼:匿名用户

改造中的无符号右移的数据是非常重要的。

例如,在字节b;做无符号右移,并在一些哈希,加密,压缩,序列化格式将用于编码的视听**。

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

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

所谓的“左乘以4(2 ^ 2),移两位除以4”最初成立于unsigned环境。这不仅是因为java的无符号的基础类型,所以你明白签署。

总之,毫无征兆地申请的权利远不止一个标志,以正确的。 。

java中,为什么没有无符号左移运算符?

4楼:匿名用户

不是java任何语言都没有, 位运算中左移跟符号没有关系的, 因为最高位就是符号位

例如8位的byte中最高位如果是 1那就表示负数 如果是左移一位, 那么最高位就会丢掉, 最低位补0 1111 1111 << 1 就会变成 1111 1110

5楼:匿名用户

??? 左移要和符号有关系吗? 符号位就在最左边呀。

6楼:晋

有啊,可以参考《java从入门到精通》这书里面有详细的讲解

java 为什么没有 无符号左移<<<

7楼:匿名用户

因为左移是在后面补0

而右移是在前面边补1或0

有无符号是取决于数的前面的第一位是0还是1所以右移是会产生到底补1还是0的问题。

而左移始终是在右边补,不会产生符号问题。

所以没有必要无符号左移<<<。

无符号左移《和左移《是一样的概念

java中无符号右移有什么意义呢?

8楼:匿名用户

无符号右移在数据变换时非常重要。

比如对byte b;做无符号右移,在众多散列、加密、压缩、影音**编码、序列化格式都会用到。

如果没有这个无符号右移,就需要用更大的空间去做有符号右移。

比如byte就需哟short,short就需要int去做,浪费空间和时间。

所谓“左移两位是乘以4(2的2次方),右移两位是除以4” 原先都是指在无符号环境下成立。只因java没有无符号的基础类型,所以你理解成有符号下才是这样。

总之,无符号右移的应用场合大大多于有符号右移。。

9楼:西南一少

我当初学java也有过类似的疑问,等到以后学jsp的时候,才发现,java基础里什么都有用,只是还没接触到而已

10楼:桂安卉势叶

举个例子

inta

=7>>1

,就是将7的二进制(111)向右移动一位,就是(011)就是3,所以int

a=3;

也可看成是除以二,如果左操作数是奇数就看做(a-1)÷2,是偶数就是a÷2

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

java中右移与无符号右移书上没解释

11楼:匿名用户

右移:第一个操作数的二进制位按第二个操作说的大小向右移位,左端用符号位补位:

int a=5; a>>2,表示a化为二进制然后右移2位,左端补0、

无符号右移,就是不管最高位是什么,左端一律补0

12楼:匿名用户

对于正数没有影响。对于负数。无符号的右移会把负数变成正数。

java 无符号的右移怎么解释

13楼:匿名用户

>>是带符号右移

>>>才是无符号右移..

带符号右移就是将那个数转为2进制然后在前面补0或1如果是正数就补0

负数补1

例如11 >> 2,则是将数字11右移2位计算过程:

11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010。

转换为十进制是2。

无符号右移与带符号右移的区别就是 无符号始终补0

java里面的无符号右移“>>>”c#怎么表示?

14楼:匿名用户

需要自己写,c# 没有无符号位移符。

////// 特殊的右移位操作,补0右移,如果是负数,需要进行特殊的转换处理(右移位)

//////

//////

public static int movebyte(int value, int pos)

return convert.toint32(s, 2); // 将二进制数字转换为数字

}else

}上面**是计算 >>> 的,返方向的唯一,按上面的**改~

15楼:匿名用户

上楼最佳的做法确实是可以做到》的操作,但这个在程序里面做法极其不佳,而且效率低下,在c#里面,本来已经有无符号的数据类型了,如果在c#里面需要将int进行类似java的操作符》操作,将int强转为uint后,进行》操作即可。

16楼:匿名用户

无符号右移在数据变换时非常重要。

比如对byteb;做无符号右移,在众多散列、加密、压缩、影音**编码、序列化格式都会用到。

如果没有这个无符号右移,就需要用更大的空间去做有符号右移。

比如byte就需哟short,short就需要int去做,浪费空间和时间。

所谓“左移两位是乘以4(2的2次方),右移两位是除以4”原先都是指在无符号环境下成立。只因java没有无符号的基础类型,所以你理解成有符号下才是这样。

总之,无符号右移的应用场合大大多于有符号右移。。

java的右移和无符号右移 (新手)

17楼:

>>>是逻辑右移,前面是补1而不是补0。输出时也要转换为原码。

java无符号的右移怎么解释,java中无符号右移有什么意义呢?

1楼 匿名用户 是带符号右移 才是无符号右移 带符号右移就是将那个数转为2进制然后在前面补0或1如果是正数就补0 负数补1 例如11 2,则是将数字11右移2位计算过程 11的二进制形式为 0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,...