按位运算符代码
Bitwise operators code
我正在尝试了解按位运算符和移位运算符。
我写了一个简单的代码来显示短类型的位。
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
我不明白为什么 long 类型不能保存值 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
为什么第二个"for"的输出是整数?
2147483648
是一个 int
文字,对于 int
来说太大了。对于 long
文字,将其更改为 2147483648L
。
根据JLS #3.10.1. Integer Literals
,
An integer literal is of type long if it is suffixed with an ASCII letter L or l (ell); otherwise it is of type int (§4.2.1).
因此
long t = 2147483648
应该是
long t = 2147483648L
其中 L
文字告诉编译器它是一个 long 值。否则默认编译器将其视为 int
值。
我正在尝试了解按位运算符和移位运算符。 我写了一个简单的代码来显示短类型的位。
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
我不明白为什么 long 类型不能保存值 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
为什么第二个"for"的输出是整数?
2147483648
是一个 int
文字,对于 int
来说太大了。对于 long
文字,将其更改为 2147483648L
。
根据JLS #3.10.1. Integer Literals
,
An integer literal is of type long if it is suffixed with an ASCII letter L or l (ell); otherwise it is of type int (§4.2.1).
因此
long t = 2147483648
应该是
long t = 2147483648L
其中 L
文字告诉编译器它是一个 long 值。否则默认编译器将其视为 int
值。