首先让我欢迎您使用 Java。好的选择!
关于您的问题:这是否正确取决于您的期望。
但首先,在学习 Java 时,你应该做两件事:
- 获得像 Eclipse 这样的开发环境。
- 了解如何使用 Junit 编写小测试例程。这是一个JUnit 教程
我已经获取了您的代码并将其嵌入到测试例程中,以查看实际发生的情况:
public class Stackoverflow extends TestCase {
@Test
public final void test() throws IOException {
testNprint(1234);
testNprint(-1234);
testNprint(0);
testNprint(255);
testNprint(256);
testNprint(Integer.MAX_VALUE);
testNprint(Integer.MIN_VALUE);
}
private void testNprint(int point) {
System.out.printf("int: %1$d (0x%1$X) -> shifted: %2$d (0x%2$X)\n",
point, shift(point));
}
private int shift(int point) {
point = point >> 16; //shifts the value to the right by 16 bits
point = point & 0xFF; //clear the upper 24 bits
return point;
}
}
这就是结果。现在您可以回答您的问题:这些数字是否符合预期?
int: 1234 (0x4D2) -> shifted: 0 (0x0)
int: -1234 (0xFFFFFB2E) -> shifted: 255 (0xFF)
int: 0 (0x0) -> shifted: 0 (0x0)
int: 255 (0xFF) -> shifted: 0 (0x0)
int: 256 (0x100) -> shifted: 0 (0x0)
int: 2147483647 (0x7FFFFFFF) -> shifted: 255 (0xFF)
int: -2147483648 (0x80000000) -> shifted: 0 (0x0)
顺便说一句:我猜结果并不像你所期望的那样:-) 因为找出>>
和的区别>>>
。