【发布时间】:2020-11-08 17:50:00
【问题描述】:
我有一个看起来像这样的方法:
private short getAddress(short ir) { //performs bit shifting to isolate and find address
short addr = ir;
addr = (short) (addr << 11); //remove leading bits
if (debug == true) {
System.out.println("LeftSh Reads " + Integer.toBinaryString(addr));
debugging();
}
addr = (short) Math.abs((addr >> 11)); //Shift back to starting position. Java's casting leaves this in negative for some reason. Taking the absolute value fixes it.
if (debug == true) {
System.out.println("RightSh Reads " + Integer.toBinaryString(addr));
debugging();
}
return addr;
}
对于本例,短 ir = 1557。
addr 的预期返回值为 21,但我得到的是 11。 我的两个系统输出的控制台输出如下:
LeftSh Reads 11111111111111111010100000000000
RightSh Reads 1011
我正在自学 Java,我觉得我错过了导致这种情况发生的有关强制转换或位移的一些基本知识。我该如何解决这个问题?
【问题讨论】:
-
请忽略debugging()方法。它从代码的其他地方打印出其他值,并且不影响此方法中的任何变量。
-
为什么是 11?你选择那个数字是因为它是导致这个问题的最小变化吗?这个问题显然对
short的大小造成了一些限制。
标签: java bit-shift short twos-complement absolute-value