为什么两个短值的按位AND导致Java中的int值?

dea*_*mon 4 java bit-manipulation

short permissions = 0755;
short requested = 0700;
short result = permissions & requested; 
Run Code Online (Sandbox Code Playgroud)

我收到编译器错误:

error possible loss of precision
found   : int
required: short
Run Code Online (Sandbox Code Playgroud)

如果我不完全错误,二进制AND的结果与最长的操作数一样长.为什么结果是整数?

如果我能做空,会不会有性能受损?

(short) permissions & requested
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 6

简短的回答(哈!)是二进制数字促销.

  • 如果任何操作数是引用类型,则执行拆箱转换(第5.1.8节).然后:
  • 如果任一操作数的类型为double,则另一个操作数转换为double.
  • 否则,如果任一操作数的类型为float,则另一个操作数转换为float.
  • 否则,如果任一操作数的类型为long,则另一个操作数转换为long.
  • 否则,两个操作数都将转换为int类型.


Mic*_*rdt 4

如果我没有完全错的话,二进制 AND 的结果与最长的操作数一样长。为什么结果是整数?

因为Java语言规范规定非长整型算术的结果始终是int。它可能是这样写的,因为承认 32 位 CPU 无论如何内部都是这样工作的——它们实际上没有办法用 Shorts 进行算术。

如果我投得太短,性能会受到影响吗?

出于上述原因:不 - 无论如何它都必须发生。