Java if语句字节对整数

Java if语句字节对整数,java,implicit-conversion,Java,Implicit Conversion,我试图理解下面一段代码(节选),它与演示位运算符有关,特别是if语句((if((b&t)…) 变量b是字节类型和tint。我无法确定如何在循环中将两种不同的变量类型测试为不等于0。程序只是继续翻转位。但是,我无法解决这个问题。它在Eclipse中运行良好。有什么想法吗 class NotDemo { public static void main(String args []) { byte b = -34; for (int t=128; t >

我试图理解下面一段代码(节选),它与演示位运算符有关,特别是
if
语句
((if((b&t)…)

变量
b
是字节类型和
t
int。我无法确定如何在循环中将两种不同的变量类型测试为不等于0。程序只是继续翻转位。但是,我无法解决这个问题。它在Eclipse中运行良好。有什么想法吗

class NotDemo {
    public static void main(String args []) {
        byte b = -34; 
        for (int t=128; t > 0; t = t/2 ) {
            if((b & t) != 0) System.out.print("1 ");
            else System.out.print("0 ");

b&t
在两个
int
s上执行按位AND。字节
b
提升为
int

它打印
-34
的二进制表示的位

-34的二进制表示是11011110

t
获取值128,64,32,16,8,4,2,1,这些值以二进制形式表示

10000000
01000000
00100000
00010000
00001000
00000100
00000010
00000001
当您以位方式将
t
的这些值与
b
进行比较时,只有当
t
b
在同一位置有一个“1”位时,才会得到非0结果

10000000 & 11011110 = 10000000 -> 1 printed
01000000 & 11011110 = 01000000 -> 1 printed
00100000 & 11011110 = 00000000 -> 0 printed
00010000 & 11011110 = 00010000 -> 1 printed
00001000 & 11011110 = 00001000 -> 1 printed
00000100 & 11011110 = 00000100 -> 1 printed
00000010 & 11011110 = 00000010 -> 1 printed
00000001 & 11011110 = 00000000 -> 0 printed

编辑:此解释不完全准确。按位和在两个
int
s(即两个32位数字)上执行,但由于
t
的前24位是
0
,它们不会影响结果。

Java隐式地将
byte
转换为
int
。它将
byte
转换为
short
转换为
int
int
转换为
long
char
转换为
int
(!),
int
float
(!),
float
double
以及它们的传递闭包。以及
long
double
(!)(即使您喜欢隐式转换,标记为(!)的可能是个坏主意。)