“从最高位置具有二进制1的数字开始(提示:使用十六进制常量)。使用带符号的右移运算符,每次都将其一直移动到所有二进制位置使用Integer.toBinaryString()显示结果。“
“提示:使用十六进制常量”,为什么会这样?是不可能的,只是简单地声明这样的常量:int i = Integer.parseInt("10101010", 2);
?
答案 0 :(得分:1)
好吧,你没有 使用十六进制常量,正如你所想的那样。它很好,因为它很短,你不需要调用任何方法来使用它。此外,您还可以获得一些编译时检查,以确保您所拥有的实际上 int
。
因此,在您的情况下,您需要一个具有二进制数字的数字处于最重要的位置。对于int
,这是二进制文件:
1000 0000 0000 0000 0000 0000 0000 0000
因此,让我们探索一些在代码中编写代码的方法。你可以做你的建议:
int i = Integer.parseInt("10000000000000000000000000000000", 2);
但是这有一些问题:
int
所以,如果你偶然这样做了:
int i = Integer.parseInt("100000000000000000000000000000000", 2); // See the mistake?
你在运行时得到这个:
Exception in thread "main" java.lang.NumberFormatException: For input string: "100000000000000000000000000000000"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:583)
at Test.main(Test.java:3)
那并不好玩。意外地提供超出范围的数字(例如,偶然添加另一个0
)会导致运行时异常。没有让调试太有趣,是吗......
编译时常数更为可取。如果您使用Java 7或更高版本,则可以执行以下操作:
int i = 0b1000_0000_0000_0000_0000_0000_0000_0000;
虽然仍然很尴尬,但它的显着更具可读性,如果你添加一个零太多,你至少会遇到编译时错误。
Hex更好:
int i = 0x8000_0000;
因此,虽然 ,但 。你可以期望任何阅读你代码的程序员都能理解十六进制,而且它简短,易读,而且编译器会遇到一些错误。
所以要结束:是的,可能使用您建议的语法,但我不会说它更容易。 Hex很短,更易读,而且您在代码中遗漏的可能性较小。如果你想真的明确,我仍然建议使用parseInt()
方法的二进制文字,因为它更安全。
(顺便说一下,你问题中的例子并不是你所要求的,但我假设这是一个语法的例子,而不是你实际拥有的那个)