我在试着理解按位操作和换挡操作。我编写了一个简单的代码,向我展示一个简短的类型。
class Shift {
public static void main (String args[]) {
short b = 16384;
for (int t = 32768; t > 0; t = t/2) {
if ((b&t) !=0) System.out.print("1 ");
else System.out.print ("0 ");
}
System.out.println();
b = b+2;
for (long t = 2147483648; t > 0; t = t/2) {
if ((b&t) != 0) System.out.print ("1 ");
else System.out.print ("0 ");
}
System.out.println();
}
}产出如下:
C:\>javac Shift.java
Shift.java:11: error: integer number too large: 2147483648
for (long t = 2147483648; t > 0; t = t/2) {
^
1 error我不明白为什么长类型不能保存值2147483648。
谢谢你的帮助。
谢谢你的回答。我改变了密码:
class Shift {
public static void main (String args[]) {
short b = 16384;
for (int t = 32768; t > 0; t = t/2) {
if ((b&t) !=0) System.out.print("1 ");
else System.out.print ("0 ");
}
System.out.println();
b = (short)(b+2);
for (long t = 2147483648L; t > 0; t = t/2) {
if ((b&t) != 0) System.out.print ("1 ");
else System.out.print ("0 ");
}
System.out.println();
}
}现在的产出是:
C:\>java Shift
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0为什么第二个“输出”是一个整数?
发布于 2015-09-14 10:31:37
据JLS #3.10.1. Integer Literals称,
如果整数以ASCII字母L或l(Ell)作为后缀,则为long类型;否则为int类型(§4.2.1)。
因此
long t = 2147483648应该是
long t = 2147483648L其中L文字告诉编译器它是一个长值。否则,默认情况下编译器将其视为int值。
发布于 2015-09-14 10:31:28
2147483648是一个int文本,它对int来说太大了。将其更改为2147483648L以获得long文本。
https://stackoverflow.com/questions/32562589
复制相似问题