在处理bcd编号时,很多二进制运算符最近都表现出以下行为:
在对字符使用任何二进制运算符并将其分配回字符变量后,编译器将引发不兼容的类型错误:
public class Test {
public static void main(String[] args) {
char c = 0;
char d = c & 0;
}
}
输出:
Test.java:4: error: incompatible types: possible lossy conversion from
int to char
char d = c & 0;
^
1 error
当编译器知道该值适合16位时,它可以正常工作-以下示例可以正常编译:
public class Test {
public static void main(String[] args) {
char d = 32767 & 0;
}
}
(2 ^ 15以下的任何数字均可) 因此,显然,此处的字符被隐式转换为整数。 这种感觉对左移运算符有意义,但除此之外,它确实很烦人,对我没有任何意义。
为什么会发生这种情况?在什么情况下会有用?