使用 NOT 运算符时的字节转换

Kar*_*aal 2 java types casting

为什么我需要在这个例子中使用变量转换?

byte b = -123;
b = (byte) ~b;
Run Code Online (Sandbox Code Playgroud)

当我尝试在不进行强制转换的情况下编译它时,我得到:

NotDemo.java:17: error: possible loss of precision
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 5

因为对于大多数 Java 运算符(~包括在内),整数操作数在应用运算符之前会被提升。于是byte晋升为int;你的代码相当于这样:

b = (byte) ~((int) b);
Run Code Online (Sandbox Code Playgroud)

因此,一般来说,分配回 abyte将丢失高位中的信息。(尽管在这种情况下这毫无意义。)