if语句字节与整数

时间:2018-12-19 09:24:30

标签: java implicit-conversion

我正在尝试理解下面(摘录)与演示按位运算符有关的一段代码,尤其是if语句((if ((b & t)...)

变量b的字节类型为t。我无法确定在循环中如何测试两种不同的变量类型不等于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 ");

1 个答案:

答案 0 :(得分:1)

b & t对两个int执行按位与运算。 byte b被提升为int

它输出-34的二进制表示形式的位。

-34的二进制表示形式是11011110。

t获得值128,64,32,16,8,4,2,1,以二进制表示

10000000
01000000
00100000
00010000
00001000
00000100
00000010
00000001

当您将t的这些值与b进行按位运算时,仅当tb的'1'位为相同的位置。

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(即两个32位数字)执行按位与运算,但是由于t的前24位为0,因此它们不会影响结果。