当前位置:首页 » 编程语言 » java右移

java右移

发布时间: 2022-07-12 03:38:33

1. java左移和右移有什么用

左移和右移并不常用,在一些特殊情况下才会使用,比如加解密时,会大量用到。
另外,偶尔在优化少数特殊代码的速度时可能用到,例如x*4就可以x<<2来代替,而后者比前者的速度快了好多倍。

2. java逻辑右移

2二进制表示为10,逻辑右移两位即为0。
逻辑右移(>>>),无论什么时候都在左填0。而算术右移(>>)则在左填符号位,符号位若为0则与逻辑右移结果一致,符号位为1则不一致。

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

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

4. java 无符号的右移怎么解释

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

带符号右移就是将那个数转为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

5. java 右移

java中貌似一般都用byte存二进制,八进制和十六进制倒是能在数字前加0和0x表示,二进制没有。

定义一个int型变量,系统默认为十进制的。
你现在想把一个数右移,具体的处理方法要根据你的这个“数”是个什么类型的。

如果是字符串,可以用以下方法处理:
String s = "101";
int i = Integer.parseInt(s, 2);
这样得到的i就是5,再右移的话就没问题了。

如果是数字,可以根据具体的进制进行相关转换操作,如果转成byte[]不方便可以转成八进制或十六进制。主要看你要右移的是个什么类型的了。
具体的可以给我留言~:)

6. Java 中 算术右移和逻辑右移有什么区别

逻辑右移就是不用考虑最高位的符号位,只需要在移动之后的空位补0就行了,例如
初始数据:
1111
1111
右移一位:
0111
1111
最高位补0
算术右移则是要考虑符号位,如果最高位为1、则移动后在最高位补1、若最高位不为1,则移动后在最高位补0,例如
初始数据,最高位为1:
1111
1001
右移一位
1111
1100
初始数据,最高位不为1:
0111
1001
右移一位
0011
1100

7. Java中右移与无符号右移书上没解释

右移:第一个操作数的二进制位按第二个操作说的大小向右移位,左端用符号位补位:
int a=5; a>>2,表示a化为二进制然后右移2位,左端补0、
无符号右移,就是不管最高位是什么,左端一律补0

8. java中右移运算符和无符号右移运算符的区别

举个例子 int a =7>>1 , 就是将7的二进制(111)向右移动一位,就是(011)就是3,所以int a=3;
也可看成是除以二,如果左操作数是奇数就看做(a-1)÷2,是偶数就是 a÷
2
右移位运算就是将左操作数的比特位向右移动第二个操作数指定的位数,在二进制中,首位是用来表示正负的,若右移运算符的第一个操作数是正数,就填充0,是负数就填充1;

9. Java中右移运算

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

操作数每右移一位,相当于该数除以2。

注:正数的原码,反码,补码一致;负数的反码是除去符号位外其余取反,负数补码是除去符号位外其余取反,末尾加1。 (二进制最左边一位是符号位)


带符号右移运算符(>>)

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。


无符号右移运算符(>>>)

>>>运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃


-1>>2 = -1

-1: 原码:1000 0001 反码:1111 1110 补码:1111 1111

右移2位:1111 1111 ( 用补码操作,并用 1 补齐左边位)

再找反码:1000 0000 ( 除去左边符号位,其余取反 )

再找原码:1000 0001 = -1 ( 还是将反码末尾加1 )


-5>>2=-2

-5: 原码:1000 0101 反码:1111 1010 补码:1111 1011

右移2位:1111 1110 ( 用补码操作,并用 1 补齐左边位)

再找反码:1000 0001 ( 除去左边符号位,其余取反 )

再找原码:1000 0010 = -2 ( 还是将反码末尾加1 )


-5>>>2=1073741822

-5:

原码:1111 1111 1111 1111 1111 1111 1111 0101

反码:1111 1111 1111 1111 1111 1111 1111 1010

补码:1111 1111 1111 1111 1111 1111 1111 1011

右移2位:0011 1111 1111 1111 1111 1111 1111 1110=1073741822


10. 关于Java的算术右移运算符

你说的右移应该是整数除法里面提到的吧。
整数除法总是zero-round,即商总是向靠近0的数方向进行舍入。
因为要向0靠近,所以负数在除2的幂之前会先加上一个偏移量2的k次方减1(2k-1,k为右移的位数)以修正
假设8位有符号表示:
则-5的补码为 1111 1011
右移一位: 1111 1101
上面的结果是-3的补码,和实际不符(-5/2 = -2)
加上修正值: 1111 1011 + 2的一次方减1 = 1111 1011 + 1 = 1111 1100
然后再右移一位:1111 1110 <= -2的补码!

热点内容
滑板鞋脚本视频 发布:2025-02-02 09:48:54 浏览:432
群晖怎么玩安卓模拟器 发布:2025-02-02 09:45:23 浏览:557
三星安卓12彩蛋怎么玩 发布:2025-02-02 09:44:39 浏览:743
电脑显示连接服务器错误 发布:2025-02-02 09:24:10 浏览:537
瑞芯微开发板编译 发布:2025-02-02 09:22:54 浏览:146
linux虚拟机用gcc编译时显示错误 发布:2025-02-02 09:14:01 浏览:232
java驼峰 发布:2025-02-02 09:13:26 浏览:651
魔兽脚本怎么用 发布:2025-02-02 09:10:28 浏览:532
linuxadobe 发布:2025-02-02 09:09:43 浏览:212
sql2000数据库连接 发布:2025-02-02 09:09:43 浏览:726