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
(!)(即使您喜欢隐式转换,标记为(!)的可能是个坏主意。)