作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我对负数的右移操作很困惑,这里是代码。
int n = -15;
System.out.println(Integer.toBinaryString(n));
int mask = n >> 31;
System.out.println(Integer.toBinaryString(mask));
结果是:
11111111111111111111111111110001
11111111111111111111111111111111
为什么将负数右移 31 而不是 1(符号位)?
最佳答案
因为在 Java 中没有无符号数据类型,所以有两种类型的右移:arithmetic shift >>
和 logical shift >>>
. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
算术移位 >>
将保留符号位。
无符号移位 >>>
不会保留符号位(因此填充 0
s)。
(来自维基百科的图片)
顺便说一下,算术左移和逻辑左移的结果是一样的,所以只有一个左移<<
.
关于Java:负数右移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15457893/
我正在做一个项目,我的 android 在这个项目中作为一个网络服务器工作;输入带端口号的 IP 地址,打开 Web 界面,用户可以将文件上传到手机。我想在 Web 界面上显示一些图片,以便我们的界面
我是一名优秀的程序员,十分优秀!